print (1,2,3,4)[1];
means printing "1234", then getting the second element of the list returned by print - except that
perl can't parse it. Which is not what you mean - so perl warns you about that (it's already a syntax error, yet you get a warning as well). However, its heuristics when to warn are were coded by a squirrel being high on glue:
- It only warns for print, printf and sort - if you use a different function, and make the same mistake you might make with print, perl won't bother to warn you then.
- It only warns if there is exactly a single space between the function name and the opening paren. Using no space, two space, a tab or a newline doesn't trigger this warning. And you thought only Python had stupid whitespace rules.
- It doesn't trigger the warning if the closing parenthesis is followed (after optional white-space) by a semi-colon, a vertical bar, a closing paren, brace or bracket, an exclaimation mark, an equal sign, or one of the letters o, a, i, u, or w. But it does warn if it's followed by any other letter, an ampersand, or something else. We all know the significance of a, i, o, u and w, don't we?
- If finds the matching closing parenthesis without taking strings in consideration.
So, we get the absurd:
print(1) # No warning.
print (1) # Warning.
print (1) # No warning.
printf (1) # Warning.
sprintf (1) # No warning.
print
(1) # No warning.
print (1) || die; # No warning.
print (1) or die; # No warning.
print (1) xor die; # Warning.
print (1) and die; # No warning.
print (1) && die; # Warning.
print (1) == 1 # No warning.
print (1) != 1 # No warning.
print (1) <=> 1 # Warning.
print (1); next # No warning.
print (1), next # Warning.
print (1) | next # No warning.
print (1) & next # Warning.
print ("(") # Warning.
print (")") # Warning.
print ("1"); # No warning (trailing semi-colon).
print (")"); # Warning (even with semi-colon).
print ("1"); die; # No warning.
print ("("); die; # Warning.
With such an illogical mess, you won't see me advocating to enable warnings.
I heard this warning will play a major role in Dan Browns new novel.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.