Concat正则表达式与常量声明中的字符串作为oneliner

时间:2013-10-19 22:00:08

标签: regex string perl

我试图将常量声明为像这样的一个衬里:

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?

2 个答案:

答案 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);