2013-12-11 16 views
-1

正如這裏所說的Call a bash script from a perl script由Igor出殯,從Perl腳本內檢索bash腳本的結果,一個方法是:如何逗號從Perl腳本返回單獨的控制檯輸出

$result = `/bin/bash /path/to/script`; 

現在,我的結果實際上是一系列文件,因爲此腳本運行一個簡單的查找命令。在控制檯上的結果是這樣的:

/path/to/file.extension 
    /path/to/file2.extension 

我想拍攝效果,刪除空格,並連接一個逗號分隔的文件名。以便我的$result看起來像:

/path/to/file.extension,/path/to/file2.extension 

什麼是最有效的方法來做到這一點?請注意,這發生在perl腳本中。

+0

爲什麼要刪除空格? –

+0

使用perl腳本,將結果作爲逗號分隔的字符串 – AspiringGeek

+0

@mpapec輸入到java程序中,您是對的。不需要刪除空格,用逗號替換新行就可以完成這項工作。 – AspiringGeek

回答

1
chomp($result); 
$result =~ tr|\n|,|; # replace every newline with comma 
$result =~ s|\s+||g; # remove whitespaces 
+0

這是一種魅力。只有一個問題是,如果它返回一個文件,它後面還有一個逗號。我想要它,以便如果返回一個文件,那麼不要在它之後放置逗號。我會怎麼做? – AspiringGeek

+0

@AspiringGeek檢查更新 –

1
foreach my $file (split(/\s+/,$result)) { 
    $file=~s/\s+//g; 
    push(@array,$file); 
} 
print join(",",@array) 

已經寫了這個,我想提的是,如果你的腳本是調用一個shell腳本,它的發現,我建議在看文件::查找Perl模塊,並在Perl做這件事。

0

你有一個這樣的字符串:

file_list = "file_1 
file_2 
file_3 
file_4" 

你想改變它,以逗號分隔。

可以使用splitjoin

my $comma_separated_list = join ", ", split(/\n/, $nl_separated_file_list); 

在兩個獨立的命令(其可以更容易看到):

my @file_array = split /\n/, $nl_separated_file_list; 
my $comma_separated_list = join ", ", $nl_separated_file_list; 

分割將產生一個數組(一個用於每一行。這裏的例子會產生:

$ comma_separated_list =「file1,file2,file3,file4,.. 。「;

如果你不想要這個空間,可以在", "加入。

可以用正則表達式來做到這一點(將\n的每個瞬間替換爲,),但我懷疑這會比連接/拆分花費更長的時間。