2011-11-06 68 views
-1

我想在perl中创建一个简单的grep调用。 我有2个变量。 $ VAR1,$ VAR2 ,我想所有的文件名与$ var1的启动和文件的结尾是$ VAR2 这将是对Perl中的grep命令,做的是语法的文件。perl简单grep

回答

1

获取与$var1开始和$var2结束在当前目录中的所有文件名:

my @matchingFileNames = <$var1*$var2>; 

编辑:要处理空格和特殊字符作为@Schwern和@ikegami正确地指出:

my @matchingFileNames = <\Q$var1\E*\Q$var2\E>; 
+2

如果'$ var1'或'$ var2'包含'*'或'''或其他东西,它会被shell解释给出错误的结果。必须先用'quotemeta'引用$ var1和$ var2。 – Schwern

+1

或者如果他们包含一个空间(更常见) – ikegami

0
opendir(DIR, "yourDIR"); 
my @FILES= readdir(DIR); 
my @matching_files; 

for my $file (@FILES) { 
    push(@matching_files, $file) if ($file =~ /\A$var1/ and $file =~ /$var2\z/) 
} 
+1

,对于循环是写'我@matching_files = {grep的时间越长,速度较慢的方式m {\ A $ var1}和m {$ var2 \ z}} @ files'。 – Schwern

1

喜欢的东西:

my @files = grep {/\A$var.*$var2\z/} @input_files 

会做

+0

或者你可以分解它,这将使它更容易阅读(和更快):'my @files = grep {//A $ var1/&&/$ var2 \ z /} @input_files;' – stevenl

+0

Use // i修饰符,还有\ Q ... \ E,文件名可能有点(。)或其他正则表达式元素。 – snoofkin