2017-07-27 82 views
1
$ ls /tmp/foo/ 
foo10.txt foo11.txt foo15.txt 

$ cat ./foo.pl 
use warnings; 
use strict; 
use Cwd; 
my $dir = cwd(); 
chdir '/tmp/foo'; 
my @files = glob "foo*.txt"; 
my $b = ""; 
for (0..$#files) { 
    my ($a) = $files[$_] =~ m/foo(.*)\.txt/; 
    $b = $b.",".$a; 
} 
chdir $dir; 
print "$b\n"; 

輸出:的毗連字符串分隔

$ perl ./foo.pl 
,10,11,15 

如何避免第一個逗號,只是前10名?如果有比這更好的邏輯,也請提出建議。

+3

在列表中使用['join'](https://perldoc.perl.org/functions/join.html),不要使用'$ a'和'$ b'作爲變量名稱---這些都是特殊的,只能與'sort'一起使用。 –

+0

[打印Perl數組的簡單方法? (用一點格式)](https://stackoverflow.com/questions/5741101/easy-way-to-print-perl-array-with-a-little-formatting) –

回答

1
say join ', ', map { /foo(.*)\.txt/ } glob "foo*.txt"; 

先建立列表/數組,然後使用join

+0

不需要在一個聲明當然。可以構建一個數組並在該循環中執行其他需要的操作(並檢查),然後打印'join'ed數組。 – zdim