$ perl -MO=Deparse,-p -le " $a= 1 && 2; print $a; "
BEGIN { $/ = "\n"; $\ = "\n"; }
($a = 2);
print($a);
-e syntax OK
$ perl -MO=Deparse,-p -e " $a && $b = 3; "
Can't modify logical and (&&) in scalar assignment at -e line 1, near
+"3;"
-e had compilation errors.
(($a && $b) = 3);
But there is no code to execute this :) its default Can't modify %s
http://perl5.git.perl.org/perl.git/blob?f=op.c#l2020
2012 /* FALL THROUGH */
2013 default:
2014 nomod:
2015 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2016 /* grep, foreach, subcalls, refgen */
2017 if (type == OP_GREPSTART || type == OP_ENTERSUB
2018 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2019 break;
2020 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2021 (o->op_type == OP_NULL && (o->op_flags & OPf
+_SPECIAL)
2022 ? "do block"
2023 : (o->op_type == OP_ENTERSUB
2024 ? "non-lvalue subroutine call"
2025 : OP_DESC(o))),
2026 type ? PL_op_desc[type] : "local"));
|