in reply to Printing an element of a list not an array

perl -e 'use v5.10; say ((localtime)[1])'

Replies are listed 'Best First'.
Re^2: Printing an element of a list not an array
by stevieb (Canon) on Aug 25, 2016 at 15:25 UTC

    Note that you can bypass the whole use statement by using -E:

    perl -E 'say ((localtime)[1])'
Re^2: Printing an element of a list not an array
by raghuprasad241 (Beadle) on Aug 25, 2016 at 15:28 UTC
    Nice and thank you!

    However, in one of the examples of intermediate perl there is a section in the package that don't use surrounding circular braces. Any idea why ?
    See below code its working fine with out any braces surrounding the list, does it have to do anything with the return?

    { package MyDate; use vars qw($AUTOLOAD); use Carp; my %Allowed_methods = qw( date 3 month 4 year 5 ); my @Offsets = qw(0 0 0 0 1 1900 0 0 0); sub new { bless {}, $_[0] } sub DESTROY {} sub AUTOLOAD { my $method = $AUTOLOAD; $method =~ s/.*:://; unless( exists $Allowed_methods{ $method } ) { carp "Unknown method: $AUTOLOAD"; return; } my $slice_index = $Allowed_methods{ $method }; return (localtime)[$slice_index] + $Offsets[$slice_index]; } } MyDate->import; # we don't use it my $date = MyDate->new(); print "The date is " . $date->date . "\n"; print "The month is " . $date->month . "\n"; print "The year is " . $date->year . "\n";

      This is because when using print or say, there is ambiguity in what you're passing. Without the parens:

      perl -w -E 'say (localtime)[1]' say (...) interpreted as function at -e line 1.

      say like print are both functions. perl just makes it convenient that you can omit a function's parens in most situations. say believes that the opening parens belongs to itself, like this: say( localtime )[1] ;, which is wrong. So if you look at it like this: say( (localtime)[1] );, it may become clearer as to what's happening. In most other cases, you can eliminate the parens:

      my $x = (localtime)[1];

      or

      return (localtime)[1];
        @stevieb, thank you very much for the clear explanation. Its clear to me now!

        Raghu.