"Advanced" functions

context and wantarray

Perl has three contexts: void, scalar and list.

                func(); # void
    my $ret   = func(); # scalar
    my ($ret) = func(); # list
    my @ret   = func(); # list

If you're in a subroutine or eval block, you can use wantarray to determine which is wanted.

An example of where context affects return values is in dealing with regular expressions:

    my $str = 'Perl 101 Perl Context Demo';
    my @ret = $str =~ /Perl/g; # @ret = ('Perl','Perl');
    my $ret = $str =~ /Perl/g; # $ret is true

.. and ...

These are called the range operators, and they can help with code that deals with ranges of integers or characters.

In the previous example, @array was filled by hand. But these are equivalent:

    my @array = ( 0, 1, 2, 3, 4, 5 );
    my @array = 0..5;

Oddly enough, it works with characters, too. If you want to get a list of letters from a to z, you can do:

    my @array = 'a'..'z';

When used in this way, .. and ... are equivalent

The range operators only increment. This will produce a zero-size list:

    my @array = 10..1; # @array is empty

If you want the reverse, ask for it.

    my @array = reverse 1..10; # @array descends from 10 to 1

You can also use the range operator in a scalar context, but that is outside the scope of this presentation. Check the man page for more details.

We want your feedback

If we can improve in any way, please let us know with this form.

Your name
Your email
Your comment