Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: adding ";" to void elements

by Limbic~Region (Chancellor)
on Feb 12, 2008 at 14:57 UTC ( [id://667579]=note: print w/replies, xml ) Need Help??


in reply to adding ";" to void elements

steph_bow,
The naive way to do this might look like:
#!/usr/bin/perl use strict; use warnings; while (<DATA>) { chomp; my @col = split /;/; push @col, '' for @col .. 2; print join ';', @col; print "\n"; } __DATA__ a;3 b;2;3 c;5;4 d;6
A less naive solution would use a module from CPAN such as Text::CSV or Text::xSV. To understand why that is a better approach, take a few minutes with Super Search.

Update: As noted by tye in the CB, this solution was originally not tested. I added chomp and changed @col .. 3; to @col .. 2;

Cheers - L~R

Replies are listed 'Best First'.
Re^2: adding ";" to void elements
by lodin (Hermit) on Feb 13, 2008 at 00:50 UTC

    You get a similar solution using a very useful idiom if you replace

    my @col = split /;/; push @col, '' for @col .. 2; print join ';', @col;
    with
    my $len = 3; print join ';', (split(/;/), ('') x $len)[0 .. $len-1];
    assuming that there are at most two semi-colons in the string. The focus here is the way to create the default trailing elements. This is quite useful when you create hashes, where it's imperative to not have any missing (or extra) elements. For instance:
    my %foo = map { (split /:/, $_, 2)[0, 1] } # Implicit "default" undef. qw/ foo:bar baz zip:zap:zoom / ; use Data::Dumper; print Dumper(\%foo); __END__ $VAR1 = { 'baz' => undef, 'foo' => 'bar', 'zip' => 'zap:zoom' };
    A naive
    my %foo = map { split /:/ } ...;
    would've been disastrous.

    lodin

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://667579]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (7)
As of 2024-04-18 12:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found