in reply to Replacement of Bracketed Expressions for JSON output

(my $newnode = $node) =~ s/.*/[1,39,2,45]/s;

I personally would forgot using s///.

my $newnode = '[1,39,2,45]';

Replies are listed 'Best First'.
Re^2: Replacement of Bracketed Expressions for JSON output
by Ardii (Initiate) on Feb 28, 2011 at 07:32 UTC
    Wow, thanks for the fast reply!

    I was thinking about using using s// as I will be reading in multiple file lines by line, e.g:

    [-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,0,28],[0,27,0,29],[0,28,0,30]

    and the details of the units for the replacements are contained in:

    $node,e.g.

    [-1,-1,0,28],

    which will be replaced by other details contained in $newnode, e.g.

    [1,30,2,34],

    which is being uniquely generated on the fly.

    I was wondering if there is a way to have an effect of say:

    $line =~ s/$node/$newnode

    After which $line is printed to an output file?

    Thanks again!

      Ardil:

      I think I'll have to go with ELESHEVA on this one. Sure you could do it with regexes, but the JSON module doesn't seem to difficult to work with:

      #!/usr/bin/perl use strict; use warnings; use JSON; while (my $line = <DATA>) { my $data = decode_json $line; if ($data->[0] == -1 and $data->[1] == -1 and $data->[2] == 32 and $data->[3] == 45 ) { $data = [ 1, 39, 2, 45 ]; } print encode_json($data), "\n"; } __DATA__ [-1,-1,32,45] [-1,-1,-1,-1] [-1,-1,0,28] [0,27,0,29] [0,28,0,30]

      On my machine, it produces (as expected):

      $ perl 890521.pl [1,39,2,45] [-1,-1,-1,-1] [-1,-1,0,28] [0,27,0,29] [0,28,0,30]

      Update: Fixed attribution.

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.