in reply to Re^2: how to split based on new line or others ?
in thread how to split based on new line or others ?

bh_perl

The problem is not in splitting but in storing the keys in hash. Hash keys are always unique, but in your case (keys: name and mobile) you are using duplicate keys. So the final key and values are getting printed. If you tell the exact requirement, we can correct you.

Check with the print statements:

foreach (split(/\n/,$data)) { my ($fldname, $fldvalue) = (split(/\:/,$_))[0,1]; print "**$fldname**\t$fldvalue\n"; $fldinfo{$fldname} = $fldvalue; }

Prasad

Replies are listed 'Best First'.
Re^4: how to split based on new line or others ?
by bh_perl (Monk) on Nov 08, 2006 at 07:41 UTC
    Yes... you are right.. Do you have any ideas how to solved it ?

      bh_perl, You have not shown your exact requirement. So by assuming your required output as:

      <name>00 00 0D</name> <mobile>123455</mobile> <name>00 00 30</name> <mobile>6575758</mobile>

      Here is one way to achieve this.

      use Getopt::Std; use vars qw /%opt/; my %fldinfo; my $options = 'h:i:o:'; getopts("$options", \%opt) or usage(); sub usage { print "Usage: $0 -[h] -i <input_file>\n"; if ($opt{h}) { print " -h : help\n"; print " -i : input value to be created\n"; print " -o : output-file\n"; } } sub chk_info { while (my ($fldname, $fldvalues) = each (%fldinfo)) { print "<name>$fldname</name>\n<mobile>$fldvalues</mobi +le>\n\n"; } } main { if ($opt{h}) { usage(); } open(DATA, "$opt{i}"); my $data = do {local $/, <DATA>}; + while ($data =~ /name\:([^\n]*)\nmobile\:([^\n]*)\n?/g) { my $fldname = $1; $fldvalue = $2; $fldinfo{$fldname} = $fldvalue; } close(DATA); chk_info(); exit(); }

      Prasad