in reply to Re^4: why doesn't "my ($a,$b)" return a list?
in thread why doesn't "my ($a,$b)" return a list?

I can't possibly imagine any use of calling my in scalar context

if (my $x = ...) { ... } open(my $fh, ...) read(..., my $buf, ...) my $r = \my $s;

Perl already has the disadvantage to default to global vars while other languages automatically restrict to a local scope

What language are you talking about? C, C++, Java, JavaScript and VB all require local declarations.

a warning should be emitted when using a my(LIST) in scalar context.

More precisely, my LIST with a list of more than one variables.

Because of its side-effects, my LIST could legitimately be used in scalar context. This job may be more appropriate for a linter (Perl::Critic). But since that use is rare and easy to rewrite (into something clearer), a warning could be appropriate. Feel free to create a ticket (just need to email perlbug@perl.org).

I only looked quickly, but my and friends might be the only builtins to return something of questionable use in scalar context.

Replies are listed 'Best First'.
Re^6: why doesn't "my ($a,$b)" return a list?
by LanX (Saint) on Aug 19, 2010 at 18:56 UTC
    > What language are you talking about? C, C++, Java, JavaScript and VB all require local declarations.

    The direct competitors, Python and Ruby, but with the restriction of function-scope instead of block-scope. And PHP ¹)

    JS is very strange in this respect, requiring explicit declarations with "var" but only allowing function-scope.

    Newer JS (Mozilla) Versions have "let" which corresponds to "my" in Perl.

    > More precisely, my LIST with a list of more than one variables.

    exactly!

    Cheers Rolf

    1) updated