in reply to it is amazing sometimes how little you know...

Perl really lends itself to these almost black magic sort of tricks. One of my favorites is =~ returning the back refrences in array context.
@array = ($string =~ /(\d+)/);
or taking an element of and array that would have been returned by some function.
$size = (stat("/etc/passwd"))[7];
It's the little things that you tend not to do in other languages...
/\/\averick

Replies are listed 'Best First'.
RE: RE: it is amazing sometimes how little you know...
by ZZamboni (Curate) on Jul 06, 2000 at 19:01 UTC
    The =~ returning the matches in an array context is probably also one of my favorites. Note that you can also combine it with the g modifier, like this:
    @array = ($string =~ /(\d+)/g);
    to get every number on the string. In fact, if you have a simple regex like this you don't need the grouping parenthesis, you can simply use:
    @array = ($string =~ /\d+/g);
    One of my favorite examples of this is the following code to keep the $VERSION variable in sync with the RCS/CVS revision number (taken from the perlmod man page):
    $VERSION = do { my @r = (q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
    It took me a while to fully understand this code the first time I saw it :-)

    --ZZamboni

RE: RE: it is amazing sometimes how little you know...
by Adam (Vicar) on Jul 05, 2000 at 22:30 UTC
    <Grin> Yeah, many of the key perl functions return different data depending on context. Localtime(), for example, returns an array of time stats unless used in scalar context, in which case it returns a nicely formated time stamp for human consumption.
    I also like the convenient perlisms like:
    print LOGFILE "\$input = $input" if DEBUGING; # Instead of: if( DEBUGING ) { print LOGFILE '$input = ', $input }