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