2016-05-19 7 views
-5

私は次のコードを持っていますが、1つのステートメントで実行できますか?ファイルを1つの文で文字列に読み込みますか?

open FILE, $file; 
while (<FILE>) { $filestr .= $_; } 
+1

Possibl [Perlでは、ファイル全体を文字列に読み込むにはどうすればよいですか?](http://stackoverflow.com/questions/953707/in-perl-how-can-i-read-an-entire-file-文字列に) – tadman

+0

明らかに異なる質問です。私はそれを1行で行う方法を尋ねています。私はすでに私の質問でファイルを読むためのコードを持っているので、明らかに私はその質問をしていません。 – CJ7

+0

1つの文字列に読み込んで改行を削除します。なぜこれは難しい? – tadman

答えて

4
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>; } 
0

:それはあなたがファイルを読ましたいように、あなたが入力レコードセパレータはundefを私に希望に見えますか?

$ 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); 
0

:二つの文は、追加のモジュールまたはサブルーチンを使用して せずに単一の文のように記述することができる方法

open (FILE, $file) and do {$filestr .= $_ while (<FILE>)}; 

暗黙のがあるが:あなたはセミコロンは文の区切りであることを考えると、以下の1文として考えることができるので、Perlは、足で自分を撮影するのを防ぐことはできません

doブロックの終わりにセミコロン、およびそれがopenエラーのチェック通常の方法を防ぐため、この構造は、実際のコードで使用すべきではありません。

open (FILE, $file) or die "Could not open file '$file': $!"; 
関連する問題