qw{}
是一种用于编写列表的漂亮方式。是否有类似的内插单词,即扩展变量? perlop似乎没有任何提及。
答案 0 :(得分:6)
不,没有内置,但我们很多人都写自己的。
对于行列表的两种ql()
需求也是如此。我使用deQ
表示q()
版本,使用deQQ
表示与Perl的“hasta”运算符一起使用的qq
版本:
sub dequeue($$) {
my($leader, $body) = @_;
$body =~ s/^\s*\Q$leader\E ?//gm;
return $body;
}
sub deQ($) {
my $text = $_[0];
return dequeue q<|Q|>, $text;
}
sub deQQ($) {
my $text = $_[0];
return dequeue qq<|QQ|>, $text;
}
这让我可以使用这样的东西:
sub compile($) {
my $CODE = shift();
my $wrap = deQQ<<"END_OF_COMPILATION";
|QQ|
|QQ| use warnings qw[FATAL all];
|QQ| no warnings "utf8";
|QQ|
|QQ| sub {
|QQ| my \$_ = shift;
|QQ| $CODE;
|QQ| return \$_;
|QQ| }
|QQ|
END_OF_COMPILATION
return eval $wrap;
}
或
my $sorter = new Unicode::Collate::
upper_before_lower => 1,
preprocess => \&reduce_for_sorting,
entry => deQ<<'END_OF_OVERRIDE'
|Q|
|Q| 005B 006E 002E ; [.0200.0020.0002.0391] # [n.
|Q| 005B ; [.0220.0020.0002.0392] # [
|Q| 005D ; [.0225.0020.0002.0395] # ]
|Q|
END_OF_OVERRIDE
看看它是如何工作的?
答案 1 :(得分:6)
您可以将qw()
洒在“常规”列表中。我有时写这样的代码:
my @command = (
qw(cat arg1 arg2),
$arg3,
qw(arg4 arg5 arg6),
"$arg7 $arg8",
# ...
);
答案 2 :(得分:2)
扩大ysth的答案:
sub qqw($) { split /\s+/, $_[0] }
my @list = qqw"$var interpolating string";
警告:我不知道如何处理前导和尾随空格。此外,原型应该确保qqw
不会像子调用那样使用多个逗号分隔值,但是你应该检查它是否确定。
答案 3 :(得分:1)
只需:
split(' ', "$var interpolating string ");