http://www.perlmonks.org?node_id=1020712

topbanana has asked for the wisdom of the Perl Monks concerning the following question:

Hello, So I have two issues: 1: script won't execute on the bash command line unless I prefix it with "perl" , and 2: "Unquoted string "say" may clash with future reserved word" Please see below. I am running cygwin on Windows7 with perl installed. The script is called hello.pl. It has execute permissions. It has #!/usr/bin/perl at the top. It uses the "say" command. I'm running 5.14 The script won't run unless I call it with "perl". Why is this? Also, the "say" command doesn't work. Appreciate any help in advance. Thanks J
~/perl J-PC:J >which perl /usr/bin/perl ~/perl J-PC:J >ls -l hello.pl -rwxr--r-- 1 J None 44 Feb 26 15:22 hello.pl ~/perl J-PC:J >cat hello.pl #!/usr/bin/perl use warnings; say "hello"; ~/perl J-PC:J >. hello.pl -bash: use: command not found -bash: say: command not found ~/perl J-PC:J >perl hello.pl Unquoted string "say" may clash with future reserved word at hello.pl +line 4. String found where operator expected at hello.pl line 4, near "say "he +llo"" (Do you need to predeclare say?) syntax error at hello.pl line 4, near "say "hello"" Execution of hello.pl aborted due to compilation errors. ~/perl J-PC:J >perl -v This is perl 5, version 14, subversion 2 (v5.14.2) built for cygwin-th +read-multi-64int
Additional information: Even changing "say" to "print", and trying to run by using "." I get no joy:
~/perl J-PC:J >cat hello.pl #!/usr/bin/perl use warnings; print "hello"; ~/perl J-PC:J >. hello.pl -bash: use: command not found Unable to initialize device PRN ~/perl J-PC:J >

Replies are listed 'Best First'.
Re: Unquoted string "say" may clash with future reserved word
by McA (Priest) on Feb 26, 2013 at 16:05 UTC

    Hi,

    you call the perl script with . hello.pl. That instructs your shell to take the commands from hello.pl and interpret them as shell commands.

    The second part with say comes from the fact, that you have to enable the new (since 5.10) function 'say' with a proper use v5.14.0;

    Best regards
    McA

      Hi McA Thanks, you have solved one of the two problems - getting "say" to work. The other problem - not being able to execute the script with "." still exists:
      ~/perl J-PC:J >cat hello.pl #!/usr/bin/perl use warnings; use v5.10.0; say "hello"; ~/perl J-PC:J >perl hello.pl hello ~/perl
      But I cannot execute the script with "." :
      J-PC:J >. hello.pl -bash: use: command not found -bash: use: command not found -bash: say: command not found ~/perl J-PC:J >
      I have added /usr/bin/perl to my $PATH variable, although I don't think that should be necessary because the script has /usr/bin/perl at the top of it. I have also put +x perms on the script.
      Update:
      =======
      I should say that I just tried running with "./hello.pl" rather than ". hello.pl" and it worked. IIRC using ". " i.e. dot space runs a command in a separate process (or summat...it's been a while)...but as far as I remember there's no reason why a command might run using "./<command>" rather than ".space<command>"
        You will never be able to execute the script with ".", since "." is a command to read a shell script -- not any generic script.

        (Just type "hello.pl" on the command line -- no ".".)

        The "." shell command doesn't do what you think it does. As McA says, it tells the shell to read commands from the supplied file. You're giving it a file full of perl commands. Think of it like talking to someone in a language they don't understand. That's not going to work except in the case of a strange perl file.
Re: Unquoted string "say" may clash with future reserved word
by RichardK (Parson) on Feb 26, 2013 at 16:16 UTC

    The help for say says

    This keyword is available only when the "say" feature is enabled, or w +hen prefixed with "CORE::"; see feature. Alternately, include a "use v5.10" or later to the current scope.

    Perl ships with lots of documentation :) try perldoc

Re: Unquoted string "say" may clash with future reserved word
by aitap (Curate) on Feb 26, 2013 at 19:14 UTC
    In addition to prevous comments, another way to enable "say" is use feature 'say';, see feature, say for more information.
    Sorry if my advice was wrong.