Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

split at '- - -'

by Saved (Beadle)
on May 17, 2013 at 13:24 UTC ( #1033972=perlquestion: print w/ replies, xml ) Need Help??
Saved has asked for the wisdom of the Perl Monks concerning the following question:

A log file has records separated by a lines with only 3 minus signs. I wish to split on them, but it is not working. I have tried many combinations of \--- \-\-\- with single & double quotes or none. My preference it to enter the Record separator as a command line parameter, but I could hard-code it if need be. Any help in this matter would be much appreciated. Thanx.

Comment on split at '- - -'
Re: split at '- - -'
by blue_cowdawg (Monsignor) on May 17, 2013 at 13:39 UTC

    Since I wasn't 100% sure of what you were asking for, I give you two! two solutions in one!

    #!/usr/bin/perl -w use strict; use Data::Dumper; my $line="this---is---Sparta!"; # # Case 1 a line with *fields* seperated by dashes my @f=split('---',$line); #split the line along the dashes print Dumper(\@f); # Case 2 Records seperated by three dashes my $oldIFS=$/; #save the old IFS $/ = undef; # make it undefined $line=<DATA>; # slurp in file $/=$oldIFS; # restore IFS @f = split('---',$line); # split on dashes $_ =~ s/^\n// foreach @f; # remove leading EOL chomp (@f); # remove traiing EOL print Dumper(\@f); exit(0); # we're done, going home __END__ line1 --- line2 --- line3
    when run gives you:
    $VAR1 = [ 'this', 'is', 'Sparta!' ]; $VAR1 = [ 'line1', 'line2', 'line3' ];


    Peter L. Berghold -- Unix Professional
    Peter -at- Berghold -dot- Net; AOL IM redcowdawg Yahoo IM: blue_cowdawg

      undef isn't the only useful thing you can assign to $/...

      use strict; use Data::Dumper; my @f; { local $/ = "\n---\n"; chomp(@f = <DATA>); } print Dumper(\@f); exit; __END__ line1 --- line2 --- line3 ---
      package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

      As a small variant, there could also be a hybrid case where you want to split on "---" if they are on a line by themselves but not if they occur within a line. Adapting Peter's code:

      #!/usr/bin/perl -w use strict; use Data::Dumper; my $line; { local $/ = undef; $line=<DATA>; } chomp $line; my @f = split('\n---\n',$line); print Dumper(\@f); __END__ line1 --- line2---line2a --- line3
      Thanx, looking good...

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1033972]
Approved by Athanasius
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (12)
As of 2015-07-03 10:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (51 votes), past polls