my $dirs = qx(echo \$PATH);
my @arr = $dirs ~= //(.*):;
我知道正则表达式必须先找到一个“ /”,然后是一个“:”。我以为我的正则表达式会做到这一点,但是我不断发现搜索模式没有终止。任何帮助将不胜感激。
无需调用Shell,因为Perl在其%ENV
哈希中提供了所有环境变量。使用split从环境变量中提取冒号分隔的目录名称:
my @dirs = split /:/, $ENV{PATH};
我不断发现搜索模式没有终止
您的代码dirs ~= //(.*):
确实很奇怪:您以/
开始一个正则表达式,然后立即将其关闭://
。
您可以使用m##
轻松知道它的开始和结束位置,如下所示:
my $dirs = qx(echo \$PATH);
my @arr = $dirs =~ m#([^:]+)(?::|$)#g;
(顺便说一下,@ toolic的答案非常好。)