On Wed, Sep 06, 2006 at 04:55:02PM +0700, Arief Yudhawarman wrote: > Saya ada masalah dg pemakaian module Tex::ParseWords di perl. > Sebagai contoh script berikut: > > #!/usr/bin/perl > use Text::ParseWords; > $line = "Date :2006-09-06 10:15:30"; > @words = &parse_line(':',0, $line); > foreach (@words) { > print "$_\n"; > } > > Outputnya: > Date > 2006-09-06 10 > 15 > 30 > > Inginnya, hasilnya seperti ini: > > Date > 2006-09-06 10:15:30 > > Ada rekan yg tahu dimana salahnya ?
Seperti yg sudah dibilang rekan lain, karena delimiternya ":" dan salah satu wordnya mengandung delimiternya, jadi displit terus oleh parse_line karena masih menemukan delimiternya. Jadi ini keterbatasan dr Text:ParseWords::parse_line karena tidak bisa kita specify limitnya mau split berapa kali maximumnya. Lagian kalo cuma mau split begitu aja ngapain mesti pake module itu segala, cukup pake split aja: @words = split(/:/, $line, 2); Kalo pake split bisa dibatasi maximum hanya melakukan 1 kali splitting untuk menghasilkan 2 tokens saja (maka parameternya 2 di atas), setelah itu berhenti. Contoh: [EMAIL PROTECTED] ~ $ echo "a:b:c" | perl -ne 'chomp;print"$_\n"for(split/:/,$_,2)' a b:c [EMAIL PROTECTED] ~ $ echo "a:b:c" | perl -ne 'chomp;print"$_\n"for(split/:/)' a b c [EMAIL PROTECTED] ~ $ Baca 'perldoc perlfunc' (atau 'man perlfunc'), cari 'split', untuk info lebih lanjut. Ronny
signature.asc
Description: Digital signature