2011-01-24 61 views
4

split関数を使用してファイル内の各レコードを分割しています。さて、デリミタは$です。Perl分割関数 - 連続区切り文字

my @fields = split(/\$/,$record); 

各レコードは4つのフィールドを持っており、いくつかのフィールドが空の場合は、以下のような2つの連続でドル記号がある場合:

abc$efg$ehd$rty 
abc$$$ 

splitは後から、第二の記録のために動作しません。分割、4の代わりに2つのフィールドだけがあります。

どのようにこれを修正するか、またはより良いオプションがある場合はどのようなアイデア? split documentationから

答えて

11

LIMITが負の場合、それは任意の大きさLIMITが指定されていたかのように扱われます。 ...

my @fields = split(/\$/, $record, -1); 

あなたは、リスト内の最後の3つのエントリのための空のフィールドを取得します:

は、これが意味することは、あなたのような何かをする場合です。

#!perl 

use strict; 
use warnings; 
use Data::Dumper; 

my $string = 'abc$$$'; 
my @fields = split(/\$/, $string, -1); 
print Dumper \@fields; 

この版画:

$VAR1 = [ 
      'abc', 
      '', 
      '', 
      '' 
     ]; 
+0

+1素敵な答え:) –

+0

素晴らしい、本当にありがとうございました! – Chris

関連する問題