Posted at

Perl でアンダースコアのみの変数をみた

More than 3 years have passed since last update.

たまたま http://cpansearch.perl.org/src/LBROCARD/Net-Amazon-S3-0.53/lib/Net/Amazon/S3/Bucket.pm のソースを読んでいたら、_ のみの変数名がでてきた。

sub _content_sub {

my $filename = shift;
my $stat = stat($filename);
my $remaining = $stat->size;
my $blksize = $stat->blksize || 4096;

croak "$filename not a readable file with fixed size"
unless -r $filename and ( -f _ || $remaining ); # ココ!
my $fh = IO::File->new( $filename, 'r' )
or croak "Could not open $filename: $!";
$fh->binmode;

はて、こんな文法あったっけ?と思って調べると、例えばここ http://www.tutorialspoint.com/perl/perl_special_variables.htm には、


The special filehandle used to cache the information from the last stat, lstat, or file test operator.


という説明がある。直前のファイルテスト演算子でテストしたファイルを _ で呼び出せるとのこと。

if -f $filename && -r $filename && -s $filename

なんかは、

if -f $filename && -r _ && -s _

と書けちゃうってことですね。

知らんかった・・・。