2013-11-06 3 views
0

У меня возникают проблемы, как это сделать:Perl: содержимое файла в скалярную переменную

$contents = do { local $/; <SEQ> }; 
$contents =~ "s/\n/ /g"; 
print $contents; 

Я хочу, чтобы объединить все строки файла в один. Однако это не работает ...

Любая идея, что происходит с моим кодом?

спасибо.

+2

'B :: Deparse' знает, что не так ...' perl -MO = Deparse myscript.pl' – toolic

ответ

-3

Вы можете использовать File::Slurp модуль:

use File::Slurp qw/read_file/; 
my $text = read_file('filename') ; 
$text =~ s/\n/ /g; 
print $text; 

Если вы не хотите использовать модуль, вы можете попробовать это:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $text; 
open my $fh, "<", "./alarm.pl" or die $!; 
{ 
    local $/;     # enable localized slurp mode 
    $text = <$fh>; 
} 
close $fh; 

$text =~ s/\n/ /g; 
print $text; 
+1

Что делать, если я не хочу его использовать? – user2886545

+1

@ user2886545 Я отредактировал ответ, плз, попробовал – user4035

+0

@downvoter осмелился прокомментировать, что случилось с ответом? – user4035

9

удалить кавычки вокруг регулярного выражения

$contents = do { local $/; <SEQ> }; 
$contents =~ s/\n/ /g; 
print $contents; 
-1

Самый простой способ, вероятно, Perl6::Slurp модуль:

use Perl6::Slurp; 
$contents = slurp \*SEQ;