例えば:
open (PS , " tail -n 1 $file | grep win " );
ファイルハンドルが空かどうかを調べたい。
eof
ファイルハンドルが使い果たされているかどうかを確認するために使用することもできます。これは、コードに大まかに基づいた図です。また、3引数形式の。で字句ファイルハンドルを使用していることに注意してくださいopen
。
use strict;
use warnings;
my ($file_name, $find, $n) = @ARGV;
open my $fh, '-|', "tail -n $n $file_name | grep $find" or die $!;
if (eof $fh){
print "No lines\n";
}
else {
print <$fh>;
}
eof
読み込もうとする前に呼び出すと、この特定のケースで期待する結果が得られますが、 perlfuncのドキュメントeof
の最後にあるアドバイスに注意してください。
実用的なヒント:入力演算子は通常、データが不足した場合、またはエラーが発生した場合に
eof
返されるため、Perlで使用する必要はほとんどありません。undef
コマンドは最大で1行を生成するので、スカラーに貼り付けます。
chomp(my $gotwin = `tail -n 1 $file | grep win`);
の終了ステータスはgrep
、パターンが一致したかどうかを示していることに注意してください。
2.3終了ステータス
通常、終了ステータスは、選択した行が見つかった場合は0、それ以外の場合は1です…</ p>
また、tail
成功した場合は0を終了し、失敗した場合はゼロ以外を終了します。その情報を活用してください。
#! /usr/bin/perl
use strict;
use warnings;
my $file = "input.dat";
chomp(my $gotwin = `tail -n 1 $file | grep win`);
my $status = $? >> 8;
if ($status == 1) {
print "$0: no match [$gotwin]\n";
}
elsif ($status == 0) {
print "$0: hit! [$gotwin]\n";
}
else {
die "$0: command pipeline exited $status";
}
例えば:
$> input.dat $ ./prog.pl ./prog.pl:一致なし[] $ echo win> input.dat $ ./prog.pl ./prog.pl:ヒット![勝つ] $ rm input.dat $ ./prog.pl tail:読み取り用に `input.dat'を開くことができません:そのようなファイルまたはディレクトリはありません ./prog.pl:一致なし[]
open (PS,"tail -n 1 $file|");
if($l=<PS>)
{print"$l"}
else
{print"$file is empty\n"}
まあ...これをスクラッチ...私は実際にパイプの出力であるファイルハンドルについての接続を確立しませんでした。
statを使用してファイルのサイズを決定する必要がありますが、最初にファイルがフラッシュされることを確認する必要があります。
#!/usr/bin/perl
my $fh;
open $fh, ">", "foo.txt" or die "cannot open foo.txt - $!\n";
my $size = (stat $fh)[7];
print "size of file is $size\n";
print $fh "Foo";
$size = (stat $fh)[7];
print "size of file is $size\n";
$fh->flush;
$size = (stat $fh)[7];
print "size of file is $size\n";
close $fh;