Skipping Selected Return Values
Problem
You have a function that returns many values, but you only care about some of them. The stat
function is a classic example: often you only want one value from its long return list (mode, for instance).
Solution
Either assign to a list with undef
in some of the slots:
($a, undef, $c) = func();
or else take a slice of the return list, selecting only what you want:
($a, $c) = (func())[0,2];
Discussion
Using dummy temporary variables is wasteful:
($dev,$ino,$DUMMY,$DUMMY,$uid) = stat($filename);
Use undef
instead of dummy variables to discard a value:
($dev,$ino,undef,undef,$uid) = stat($filename);
Or take a slice, selecting just the values you care about:
($dev,$ino,$uid,$gid) = (stat($filename))[0,1,4,5];
If you want to put an expression into list context and discard all its return values (calling it simply for side effects), as of version 5.004 you can assign to the empty list:
() = some_function();
See Also
The discussion on slices
in of Perl Developing and perlsub (1);