Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^3: Shebang Inside the coding ?

by blazar (Canon)
on Jan 16, 2006 at 12:55 UTC ( [id://523485]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Shebang Inside the coding ?
in thread Shebang Inside the coding ?

Because your editor, whatever it is, however good it is, is not perl, and it is a well known axiom that "nothing but perl can parse Perl". So do not trust your editor's syntax highlighter. Trust your perl parser! Of course this simple case is on the border line, so to say, and probably other syntax highlighters do a better job of only marking a shebang looking like line like a shebang if it actually occurs at the beginning of the script. But in general expect similar "mistakes".

Occasionally even perl has a difficulties parsing Perl and you need to help it by disambiguating suitably!

Of course both the shebang line and a "regular" comment are just comments to perl itself. Well, not quite: I remember having read that perl does not fully trust the OS interpreting the shebang line and re-reads it, which is the reason why stuff like

#!Perl -lpi.bak

does work also under (osen that do not do shebang line interpretation, like) Windows.

Replies are listed 'Best First'.
Re^4: Shebang Inside the coding ?
by Perl Mouse (Chaplain) on Jan 16, 2006 at 19:36 UTC
    It's not a matter of "trusting". The kernel will only do something with the shebang line if 1) it's a Unix kernel and 2) the program was executed directly. Furthermore, not every kernel will do the same - different kernels have different limits on the number of significant characters.

    So, to make things equal, perl will pay attention the the first line - if it's a shebang line, it will look which command follows the shebang line. If it doesn't look like a perl, it will start this command, else it will look which options have been passed.

    It's also not a matter of re-reading. It has to read the first line anyway. (Other interpreters would just discard the first line - it's not a coincidence that interpreters (*) line Perl, shells and Python use the # as their comment character.

    (*) Called interpreter because they can read a program on their STDIN and execute it.

    Perl --((8:>*

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://523485]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-25 23:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found