私は次のコードを持っていますが、1つのステートメントで実行できますか?ファイルを1つの文で文字列に読み込みますか?
open FILE, $file;
while (<FILE>) { $filestr .= $_; }
私は次のコードを持っていますが、1つのステートメントで実行できますか?ファイルを1つの文で文字列に読み込みますか?
open FILE, $file;
while (<FILE>) { $filestr .= $_; }
open FILE, $file; while (<FILE>) { $filestr .= $_; }
ただし、改行の存在は、そのスニペットについての私を心配でしょう最後の事です。私は、次の詳細心配するだろう:
open
の使用、open
のエラーチェックの欠如、use strict;
の使用の欠如、および
open(my $fh, '<', $qfn)
or die("Can't open \"$qfn\": $!\n");
my $file; { local $/; $file = <$fh>; }
$ perldoc perlvar # /slurp<enter><copy example code><paste>
$ perl -E '
my $file = "test.txt";
my $content = "";
open my $fh, "<", $file or die $!;
{
local $/;
$content = <$fh>;
}
close $fh;
print $content;'
これは決して1つのステートメントではありません。しかし、何かがperlの "1行のコード"になることがあります。
だから...いいですね。あなたはループしないことを意味しませんでした。
考慮すべきその他のもの:
open my FILE, '<', $file or die $!;
my @filestrs = <FILE>;
またはcpanm File::Map
後:
Path::Tiny
と同様に
use File::Map qw(map_file);
map_file my $filestr, $file;
:1行の
use Path::Tiny;
my $filestr = path($file)->slurp; # or ->slurp_utf8;
並べ替え:
まだ少ない文:私はあなたの質問があることを解釈する
open(my $fh, '<', $file);
read($fh, $filestr, -s $fh);
:二つの文は、追加のモジュールまたはサブルーチンを使用して せずに単一の文のように記述することができる方法
。
open (FILE, $file) and do {$filestr .= $_ while (<FILE>)};
暗黙のがあるが:あなたはセミコロンは文の区切りであることを考えると、以下の1文として考えることができるので、Perlは、足で自分を撮影するのを防ぐことはできません
do
ブロックの終わりにセミコロン、およびそれがopen
エラーのチェック通常の方法を防ぐため、この構造は、実際のコードで使用すべきではありません。
open (FILE, $file) or die "Could not open file '$file': $!";
Possibl [Perlでは、ファイル全体を文字列に読み込むにはどうすればよいですか?](http://stackoverflow.com/questions/953707/in-perl-how-can-i-read-an-entire-file-文字列に) – tadman
明らかに異なる質問です。私はそれを1行で行う方法を尋ねています。私はすでに私の質問でファイルを読むためのコードを持っているので、明らかに私はその質問をしていません。 – CJ7
1つの文字列に読み込んで改行を削除します。なぜこれは難しい? – tadman