摘自 perldoc.perl.org
map BLOCK LIST
map EXPR, LIST
對于 LIST 里的每一個元素按照 BLOCK 或者 EXPR 里的操作進行求值。
返回求值結果組成的數組。
如果返回值是 scalar 類型,則返回結果數組的大小。
例子:
返回一組數字對應的字符
@chars = map(chr, @numbers);
返回一組數字的平方
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
返回大于5的數字的平方
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
由于 map 總是返回一個列表,因此可以賦值給哈希類型的變量:
%hash = map { get_a_key_for($_) => $_ } @array;
也可以這樣寫:
%hash = ();
foreach (@array) {
$hash{get_a_key_for($_)} = $_;
}
-X FILEHANDLE
文件測試函數:
-r File is readable by effective uid/gid.
-w File is writable by effective uid/gid.
-x File is executable by effective uid/gid.
-o File is owned by effective uid.
-R File is readable by real uid/gid.
-W File is writable by real uid/gid.
-X File is executable by real uid/gid.
-O File is owned by real uid.
-e File exists.
-z File has zero size (is empty).
-s File has nonzero size (returns size in bytes).
-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.
-u File has setuid bit set.
-g File has setgid bit set.
-k File has sticky bit set.
-T File is an ASCII text file (heuristic guess).
-B File is a "binary" file (opposite of -T).
-M Script start time minus file modification time, in days.
-A Same for access time.
-C Same for inode change time (Unix, may differ for other platforms)
delete EXPR
EXPR 為哈希變量的 slice 或者是單個元素。
返回值為刪除掉元素的值,可以是列表。
如果返回值被要求為 scalar 類型,則返回被刪除的最后一個值。
delete 也可以用于數組類型的變量,不過它的行為可能不是你所預想的那樣。
例子:
%hash = (foo => 11, bar => 22, baz => 33);
$scalar = delete $hash{foo}; # $scalar is 11
$scalar = delete @hash{qw(foo bar)}; # $scalar is 22
@array = delete @hash{qw(foo bar baz)}; # @array is (undef,undef,33)
each HASH
each ARRAY
each EXPR
返回哈希的每個 (key, value) 所組成的數組。
例子:
while (($key, $value) = each %hash) {
print $key, "\n";
delete $hash{$key}; # This is safe
}
eof FILEHANDLE
eof ()
eof
注意 eof() 與 eof 的區別:
eof():如果到達了 <> 的最后一個文件的末尾,則返回1
eof:如果到達了當前文件的末尾,則返回1
# reset line numbering on each input file
while (<>) {
next if /^\s*#/; # skip comments
print "$.\t$_";
} continue {
close ARGV if eof; # Not eof()!
}
# insert dashes just before last line of last file
while (<>) {
if (eof()) { # check for end of last file
print "--------------\n";
}
print;
last if eof(); # needed if we're reading from a terminal
}