Perl 在没有tmp变量的情况下,可以将其写入1行或2行吗?

Perl 在没有tmp变量的情况下,可以将其写入1行或2行吗?,perl,Perl,我有这个密码 my $tmp = $q->param('owner'); $tmp =~ s/\s*//g; # remove white space from string my @owners = split ",", $tmp; 这是可行的,但它占用了3行,使用临时变量是非常错误的 它能在更少的行中完成并且没有临时变量吗?我会这样写: my @owners = map { s/\s*//g; $_ } split ",", $q->param('owner'); 因

我有这个密码

my $tmp = $q->param('owner');
$tmp =~ s/\s*//g; # remove white space from string
my @owners     = split ",", $tmp;
这是可行的,但它占用了3行,使用临时变量是非常错误的


它能在更少的行中完成并且没有临时变量吗?

我会这样写:

my @owners = map { s/\s*//g; $_ } split ",", $q->param('owner');
因为你把所有的空格都去掉了,不管你是对输入还是对列表这样做

当然,我经常使用
map
-ped替换,因此我得到了一个名为
filter
的子项,它看起来像
filter{s/\s*//g}…
,基本相同。

您可以使用:

my @owners = split /\s*,\s*/, $q->param('owner');
my @owners = split(/\s*,\s*/, $q->param('owner');

但是你仍然会有不在
周围的空格,

那么
一二,三四
呢?不是100%确定,但我怀疑OP实际上并不想删除所有空格。可能他不是有意的,但正如你写的那样,
会给出['一二','三四']
他的原作给出了['onetwo','threefour']@ysth,这不是我第一次重新发明轮子。:)但我也在一家受CPAN限制的商店里。此外,查看代码,我喜欢让我的列表操作符也处理标量上下文。所以这也很有效
my$trimmed=filter{/\s*//g}$val
@ysth,是的,我现在看到了:
join(“,$scalar)eq$scalar
my @owners = $q->param( 'owner' ) =~ m{([^,\s]+)}g;