On Tue, Nov 25, 2008 at 1:03 PM, Ludwig Isaac Lim <[EMAIL PROTECTED]>wrote:
> > Hi: > > Is there a better way of rewriting the following perl statement? > (method 1) > @arr = split /\s+/, $str, $num_elem; > > die("Should have $num_elem element") if ( (scalar @arr) != $some_number); You may remove "scalar". "!=" operates only on scalar values, so the named array above will be evaluated in scalar context even without "scalar". > > $var1 = @arr[0]; > $var2 = @arr[1]; @array[index] is wrong. The correct sigil for scalar values is "$", even when the scalar is part of an array or hash. That was changed in Perl 6 though, because many programmers get confused by that. :-) ... > ... > $varn [EMAIL PROTECTED]<number>]; > > (method 2) > > ($var1,$var2,$var3) = split /\s+/,@arr,3; > Passing an array as the second argument to split() and expecting split() to return a list is wrong. @arr will be evaluated in scalar context. Thus, what will be passed to split() is the length of @arr. > But using method2 2, it seems the only way to check if 3 elements are > returned by split is have > something like this (I maybe wrong): > > if (!(defined($var3))) { > die("less than 3 elements returned"); > } > > > Any better way of combining the brevity of method 2 and the error > checking of method 1? > Try @array = split(...); die if @array != $required_num_of_elts; ($var1, $var2, ...) = @array; HTH
_________________________________________________ Philippine Linux Users' Group (PLUG) Mailing List http://lists.linux.org.ph/mailman/listinfo/plug Searchable Archives: http://archives.free.net.ph