the "_" is a magical filehandle
that caches the information from the preceding "stat()", "lstat()", or
filetest.
e così incuriosito sono andato subito ad approfondire nella documentazione di
stat
:If "stat" is passed the special filehandle consisting of an
underline, no stat is done, but the current contents of the stat
structure from the last "stat", "lstat", or filetest are returned.
Diciamo che
_
, a differenza della variabile topic non è una vera variabile ma un segnaposto particolare che viene interpretato come accesso alla cache dell'ultima operazione stat effettuata. E' facile costruire un esempio che mostri questi:#!env perl use v5.20; my $file_name = $0; # myself my @stat_values = stat $file_name; my @cached_values = stat _; say "Same values for $file_name!" if ( $stat_values[1] == $cached_values[1] # inode && $stat_values[7] == $cached_values[7] # size && $stat_values[8] == $cached_values[8] ); # atime
Lo stesso utilizzo non può essere effettuato con
File::stat
, che infatti riporta nella documentazione:As of Perl 5.8.0 after using this module you cannot use the implicit $_ or
the special filehandle "_" with stat() or lstat(), trying to do so leads
into strange errors.
Nessun commento:
Posta un commento