說明 :
split 是 Perl 中非常有用的函式之一,它可以將一個字串分割並將之置於陣列中。若無特別的指定,該函式亦使用 RE 與 $_ 變數
語法 :
如果 PATTERN 有給, EXPR 預設是 $_; 如果 PATTERN 是空字串, 則 EXPR 會被切割成以字元為單位的陣列. 範例如下:
- print join(':', split('', "abc"));
使用範例 :
底下為此函數的使用範例.
- Example 1. Splitting by a special character
對句子使用特定字元進行切割 :
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'Becky Alcorn,25,female,Melbourne';
- my @values = split(',', $data);
- foreach my $val (@values) {
- print "$val\n";
- }
- exit 0;
- Example 2. Splitting by a string
底下使用字串 '~~~' 進行切割 :
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'Bob the Builder~~~10:30am~~~1,6~~~ABC';
- my @values = split('~~~', $data);
- foreach my $val (@values)
- {
- print "$val\n";
- }
- exit 0;
- Example 3. Splitting on a pattern
PATTERN 可以使用 RE 來定義更廣泛的 separator, 底下使用 "\\d+" 將所有不定長度的數字當作 separator:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'Home1Work2Cafe3Work4Home';
- # \d+ matches one or more integer numbers
- my @values = split(/\d+/, $data);
- foreach my $val (@values)
- {
- print "$val\n";
- }
- exit 0;
- Example 4. Splitting on an undefined value
如果 PATTERN 為 undef, 則會將字串切割為字元的陣列:
- #!/usr/bin/perl
- my $data = 'Becky Alcorn';
- my @values = split(undef,$data);
- foreach my $val (@values) {
- print "$val\n";
- }
- exit 0;
- Example 5. Splitting on a space
如果你使用 ' ' 來進行切割, 會類似使用 RE 的 /\s+/. 包含斷行, Tab 都會被當作 separator:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = "Becky\n\nAlcorn";
- my @values = split(' ',$data);
- # Print 'aa' either side of the value, so we can see where it split
- foreach my $val (@values) {
- print "aa${val}aa\n";
- }
- exit 0;
如果你"真的"希望只用空白當作 separator, 可以考慮下面代碼:
- my @values = split(/ /,$data);
如果你沒有給任何參數, split 會對 $_ 使用 ' ' 當作 separator 進行切割:
- #!/usr/bin/perl
- use strict;
- use warnings;
- foreach ("%%Bob\tthe Builder%%", "%%Thomas\nthe TankEngine%%", '%%B1 and B2%%')
- {
- my @values = split;
- print "Split $_:\n";
- foreach my $val (@values)
- {
- print "--$val\n";
- }
- }
- exit 0;
- Example 8. Limiting the split
你也可以透過 LIMIT 參數決定最多切出多少個單位 (LIMIT=2 意味只切一次.), 下面代碼最多只會切割 2 次:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'Becky Alcorn,25,female,Melbourne';
- my @values = split(',', $data, 3);
- foreach my $val (@values)
- {
- print "$val\n";
- }
- exit 0;
- Example 9. Keeping the delimiter
如果你在切割後想要保留 separator, 可以使用 '(' 與 ')' 將 separator 中要保留的部分括起來. 下面代碼會保留 separator 的第一個數字:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'Home1Work22Cafe333Work4444Home';
- # \d+ matches one or more integer numbers
- # The parenthesis () mean we keep the digits we match
- my @values = split(/(\d)+/, $data);
- foreach my $val (@values)
- {
- print "$val\n";
- }
- exit 0;
- Example 10. Splitting into a hash
如果已知道你的輸入字串是平衡的, 你可以直接將輸出轉成 hash. 參考範例如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $data = 'FIRSTFIELD=1;SECONDFIELD=2;THIRDFIELD=3';
- my %values = split(/[=;]/, $data);
- foreach my $k (keys %values)
- {
- print "$k: $values{$k}\n";
- }
- exit 0;
補充說明 :
* perldoc.perl.org - split
* Using the Perl split() function
沒有留言:
張貼留言