3

我试图将一个常量声明为这样的单行:

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?

4

2 回答 2

4
use constant HOME_SCRIPT => "/home/george/". ($0 =~ /(.*)\.pl/)[0];

或者

use constant HOME_SCRIPT => join "", "/home/george/", $0 =~ /(.*)\.pl/;
于 2013-10-19T22:02:44.547 回答
0

/r如果您正在运行 Perl 5 版本 14 或更高版本,则可以通过修饰符使用非破坏性替换。像这样

use constant HOME_SCRIPT => ("/home/george/$0") =~ s/\.pl\z//r;

或者,如果您被迫更早地使用某些东西,或者只是更喜欢不同的方法,您可以编写

use constant HOME_SCRIPT => '/home/george/' . ($0 =~ /(.*)\./, $1);
于 2013-10-19T23:23:19.047 回答