在我使用过的其他语言(如 Erlang 和 Python)中,如果我要分割字符串并且不关心其中一个字段,我可以使用下划线占位符。 我在 Perl 中尝试过:
(_,$id) = split('=',$fields[1]);
但是我收到以下错误:
无法修改 ./generate_datasets.pl 第 17 行“);”附近列表赋值中的常量项
由于编译错误,./generate_datasets.pl 的执行中止。
Perl 是否有类似的模式,我可以使用它来代替创建无用的临时变量?
undef
在 Perl 中具有相同的用途。
(undef, $something, $otherthing) = split(' ', $str);
如果您使用Slices,您甚至不需要占位符:
use warnings;
use strict;
my ($id) = (split /=/, 'foo=id123')[1];
print "$id\n";
打印:
id123
您可以分配给
(undef)
。
(undef, my $id) = split(/=/, $fields[1]);
您甚至可以使用
my (undef)
。
my (undef, $id) = split(/=/, $fields[1]);
您还可以使用列表切片。
my $id = ( split(/=/, $fields[1]) )[1];
只是为了解释为什么你会遇到你看到的特定错误......
_
是一个 Perl 内部变量,可以在 stat
命令中使用,以指示“与我们在之前的 stat
调用中使用的文件相同”。这样,Perl 使用缓存的统计数据结构,并且不会进行另一个 stat
调用。
if (-x $file and -r _) { ... }
此文件句柄是一个常量值,无法写入。该变量存储在与
$_
和 @_
相同的 typeglob 中。
参见 perldoc stat。