in reply to Re: Writing a parser
in thread Writing a parser

Zielony, I don't think you're asking a perl question, it's a Unix question you're asking. If a text file is an executable, and the first line is:

#!something_here
Then if an executable is in the command path named something_here, then something_here is used to run the file. Something_here can be any kind of executable, including a parsing perl script.

Replies are listed 'Best First'.
Re^3: Writing a parser
by Crackers2 (Parson) on Jan 29, 2008 at 22:15 UTC

    Actually I just tried that and it won't work for me unless it's a true executable. If I try to use a perl script it actually gets passed to bash for some reason.

    Unless I'm doing something wrong of course...

    [root@spoonbill root]$ cat /sbin/parser #!/usr/bin/perl while (<>) { print "line: $_"; } [root@spoonbill root]$ cat scr #!/sbin/parser this is my file

    This works:

    [root@spoonbill root]$ /sbin/parser scr line: #!/sbin/parser line: this line: is line: my line: file line:

    This does not:

    [root@spoonbill root]$ ./scr ./scr: line 2: this: command not found ./scr: line 3: is: command not found ./scr: line 4: my: command not found Usage: file [-bciknsvzL] [-f namefile] [-m magicfiles] file... Usage: file -C [-m magic]

    (All run as root just in case there was a permission problem)

      I'm sorry to tell you, but on Linux, that is not allowed. On * nix systems the exec family of calls is used to start processes. From the execve(2) man page:

      execve() executes the program pointed to by filename. filename must be either a binary executable, or a script starting with a line of the form "#! interpreter [arg]". In the latter case, the interpreter must be a valid pathname for an executable which is not itself a script, which will be invoked as interpreter [arg] filename

      Note where it says, "the interpreter...is not itself a script". So you will have to use
      #!/usr/bin/perl /path/to/my/script

      --traveler
      Yeah, here is the problem. I was trying exactly as you.
A reply falls below the community's threshold of quality. You may see it by logging in.