in reply to Re: Printing an element of a list not an array
in thread Printing an element of a list not an array

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";

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

    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.