Passing the result of split into variables but ensure they have default values in perl -


in perl program need

use strictures 1; while(<>) {     chomp;     my($action, $v1, $v2) = map { s/xx/42/g; $_ } split /\s+/;     print "=$action=$v1=$v2=\n";     do_someting( $action, func1($v1), func2($v2) ); } 

the problem is, when input contains < 3 "fields" , want ensure nonexistent fields defined , contain "default". want next: input -> assigned output variables

"mk axxb ac"  -> "mk" "a42b" "ac" "dexx ab"     -> "de42" "ab" "default" 

and on..

tried next, doesn't works.

    my($action, $v1, $v2) = map { s/xx/42/g; $_ // "default" } split /\s+/; 

it's looks i'm misunderstanding how map and/or // operator works.

split never return undef, // return lhs.


if have different defaults,

my ($action, $v1, $v2) = map { s/xx/42/rg } split; $action //= 'default action'; $v1     //= 'default v1'; $v2     //= 'default v2'; 

if it's same default all,

my ($action, $v1, $v2) = map { s/xx/42/rg } split; $_ //= 'default' $action, $v1, $v2; 

you have less repetition if used array instead of separate vars.

if have different defaults,

my @defaults = ('default action', 'default v1', 'default v2'); @fields = map { s/xx/42/rg } split; $fields[$_] //= $defaults[$_] 0..2; 

if it's same default all,

my @fields = map { s/xx/42/rg } split; $fields[$_] //= 'default' 0..2; 

Comments