http://www.perlmonks.org?node_id=985197


in reply to Re^2: Syslog files revisited
in thread Syslog files revisited

... but it gives me the problem that the variable message at the end gets split up into an indeterminate number of csv values ...

No, the third parameter to split limits the number of resultant fields so the $remainder scalar variable holds the entirety of your variable message.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^4: Syslog files revisited
by stevbutt (Novice) on Aug 03, 2012 at 16:09 UTC

    Thats great and thank you very much for your help. I have one further issue though. My existing code now looks like this

    #!/usr/bin/perl use 5.010; use strict; use warnings; while (my $line = <STDIN>) { chomp($line); my ( $mon, $day, $time, $dom, $login, $remainder ) = split m{:?\s+}, $line, 6; my %monthNos = do { my $no = 0; map { $_ => ++ $no } qw{ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec }; }; my $yr = q{2012}; my $csv = sprintf q{%02d/%02d/%s %s,%s,%s,"%s"}, $day, $monthNos{ $mon }, $yr, $time, $dom, $login, $remainder; say $csv; }

    As I wanted the remainder to be in double quotes so it would read in as one field. The problem is that remainder sometimes already contains double quotes which I would like to remove or replace with single quotes

    I tried the following but it leaves be with an empty set of double quotes

    my $remainder =~ s/""\"\""/\'/g;

      Sorry to bother anyone with such trivial stuff, I played and found the the following worked

      $remainder =~ tr/"/'/d;

      Many Thanks