【发布时间】:2014-03-21 20:07:42
【问题描述】:
嗨,我是 Perl 的新手。我无法理解运算符的优先级。我在 Ruby 的 Wikipedia 页面中找到了一个程序
"Nice Day Isn't It?".downcase.split("").uniq.sort.join # => " '?acdeinsty"
我在 Perl 中尝试过同样的事情,但解析器的行为很奇怪。我有以下程序
use strict;
use warnings;
use List::MoreUtils qw(uniq distinct) ;
my $hello = q/Nice Day Isn't It?/ ;
print join ('', sort ( List::MoreUtils::uniq (split(//, lc $hello )))); # &List::MoreUtils::uniq parses correctly and I need to include & before call.
print "\n";
print join('', sort( List::MoreUtils::uniq(split(//, lc $hello, 0))));
输出:
'?acdeiiinnstty
'?acdeinsty
我还尝试查看 Perl 如何使用 B::Deparse 模块解析代码,这是输出
perl -MO=Deparse test.pl
use List::MoreUtils ('uniq', 'distinct');
use warnings;
use strict 'refs';
my $hello = q[Nice Day Isn't It?];
print join('', (sort List::MoreUtils::uniq split(//, lc $hello, 0)));
print "\n";
print join('', sort(&List::MoreUtils::uniq(split(//, lc $hello, 0))));
test.pl syntax OK
当我简单地使用 uniq 时,我也会收到警告,因为我可能会与未来的保留关键字发生冲突。任何研究列表优先级和关联性的有用链接都将非常有帮助。我提到了 perlop 术语和列表运算符部分。
提前致谢。
【问题讨论】:
-
@mpapec 。抱歉,我不去查搜索。此外,List::MoreUtils::uniq 和后面的括号之间的空格似乎是带有空格的陷阱,使 uniq 成为排序函数,而没有空格则成为单独的函数。
标签: perl