2014-02-25 61 views
2

問題。我正在嘗試從命令行讀取perl字符串,例如「abcdef」,然後將其分成「a_b_c_d_e_f」。拆分Perl字符串並在_DO之間添加_

我正在努力與邏輯部分。有任何想法嗎?

#!/usr/bin/perl 

while($line=<STDIN>){ 
    chomp $line; 
    split $line; 

join ("_", $line); 

print $line; 
} 
+0

我不確定你的意思是「邏輯部分」*。該代碼中唯一的邏輯語句是'while'。 – Borodin

回答

3

The split manpage實際上只包括這個例子:

print join(':', split('', 'abc')), "\n"; 

調整使用_,而不是:$line,而不是'abc',我們得到:

print join('_', split('', $line)), "\n"; 

最重要的一點是, split不修改它的參數,它只是返回一個列表,並且join不會修改它的參數,它只是返回一個字符串。因此,在沒有使用返回值的情況下調用splitjoin是毫無意義的。

+1

「split」的第一個參數是*正則表達式*,不應指定爲字符串 – Borodin

+0

@Borodin:是的,這很奇怪。我個人總是將它指定爲正則表達式;不知道爲什麼人工頁面做這個不同。 – ruakh

+0

我同意。我認爲這是一個文檔錯誤。 – Borodin

0

一行代碼:

print join('_', split('', $line)), '\n'; 

你可以閱讀更多有關Perl的split()功能here

1

你需要的是

print join('_', split //, $line), "\n"; 
+0

我認爲你是'分裂','應該'分裂('','。 – Drewness

+1

@Drewness:***沒有***,絕對不是。'split'的第一個參數是*正則表達式*除非在特殊情況下您可以傳遞單個文字空間,這相當於請求默認行爲。 – Borodin

0

除非你必須使用split,您可以使用字符間替代這樣的:

use strict; 
use warnings; 

my $string = 'abcdef'; 
$string =~ s/(?<=.)(?:)(?=.)/_/g; 
print $string; 

輸出:

a_b_c_d_e_f 

希望這可以幫助!