Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl assignment with a dummy placeholder

Tags:

split

perl

In other languages I've used like Erlang and Python, if I am splitting a string and don't care about one of the fields, I can use an underscore placeholder. I tried this in Perl:

   (_,$id) = split('=',$fields[1]);

But I get the following error:

Can't modify constant item in list assignment at ./generate_datasets.pl line 17, near ");"
Execution of ./generate_datasets.pl aborted due to compilation errors.

Does Perl have a similar such pattern that I could use instead of creating a useless temporary variables?

like image 936
Dr. Watson Avatar asked May 06 '11 21:05

Dr. Watson


3 Answers

undef serves the same purpose in Perl.

(undef, $something, $otherthing) = split(' ', $str);
like image 75
geekosaur Avatar answered Sep 29 '22 19:09

geekosaur


You don't even need placeholders if you use Slices:

use warnings;
use strict;

my ($id) = (split /=/, 'foo=id123')[1];
print "$id\n";

__END__

id123
like image 44
toolic Avatar answered Sep 29 '22 19:09

toolic


You can assign to (undef).

(undef, my $id) = split(/=/, $fields[1]);

You can even use my (undef).

my (undef, $id) = split(/=/, $fields[1]);

You could also use a list slice.

my $id = ( split(/=/, $fields[1]) )[1];
like image 29
ikegami Avatar answered Sep 29 '22 19:09

ikegami