我试图将常量声明为像这样的一个衬里:
use constant HOME_SCRIPT => "/home/george/". $0 =~ /(.*)\.pl/;
问题是这会返回:/home/george/1
。即它汇总了正则表达式的匹配数量
我试过了:
use constant HOME_SCRIPT => ("/home/george/"). $0 =~ /(.*)\.pl/;
use constant HOME_SCRIPT => "/home/george/". ($0 =~ /(.*)\.pl/);
但结果相同。
是否可以为此创建一个oneliner?
答案 0 :(得分:4)
use constant HOME_SCRIPT => "/home/george/". ($0 =~ /(.*)\.pl/)[0];
或
use constant HOME_SCRIPT => join "", "/home/george/", $0 =~ /(.*)\.pl/;
答案 1 :(得分:0)
如果您运行的是Perl 5版本14或更高版本,则可以通过/r
修饰符使用非破坏性替换。喜欢这个
use constant HOME_SCRIPT => ("/home/george/$0") =~ s/\.pl\z//r;
或者,如果你被迫使用更早的东西,或者只是喜欢不同的方法,你可以写
use constant HOME_SCRIPT => '/home/george/' . ($0 =~ /(.*)\./, $1);