Shell tenta interpretar o script Perl apesar da correta shebang [closed]

0

Examinei os fóruns e não consigo descobrir como consertar isso. Eu tenho um código perl muito simples que funciona bem no Windows, mas quando eu tento no Linux e Solaris eu recebo os seguintes erros:

bash: ./test.pl: line 2: syntax error near unexpected token '('
bash: ./test.pl: line 2: 'print '$_\n' for @Config{qw(myuname osname osvers)};'

Este é o meu código:

#!/usr/bin/perl
use Config;
use strict;
print '$_\n' for @Config{qw(myuname osname osvers)};

Alguma idéia de como eu posso contornar isso?

    
por user974873 13.01.2014 / 16:37

3 respostas

1

Insira o seguinte no seu script:

use strict;
use warnings;

Além disso, eu não vi o caminho do seu Perl na máquina como /usr/bin/perl no início do código. Você pode ver o formulário correto no prompt de comando do shell usando which perl .

    
por 13.01.2014 / 16:45
3

Parece que a linha shebang ( #!/usr/bin/perl ) não é interpretada em seu sistema porque bash está tentando interpretar o script. Tente invocar o script como:

[user@host]$ perl test.pl

Além disso, uma linha muito melhor "shebang", cortesia do livro do Camel :

#!/usr/bin/perl
eval "exec /usr/bin/perl -S $0 ${1+"$@"}"
    if $running_under_some_shell;

Isso permite que você invoque o script como ./test.pl , independentemente de o seu sistema entender a linha shebang.

Nota adicional

Isso não está relacionado ao problema real, mas é um problema que você eventualmente encontrará quando executar o script em Perl: '$_\n' está errado, você precisa de citações interpolativas (também chamadas de aspas e aspas duplas) para $_ ser interpolado e \n para ser reconhecido como uma seqüência de escape em oposição a uma barra invertida literal que precede a letra n .

Várias maneiras de fazer isso:

print "$_\n"   for @Config{...}

ou

print qq{$_\n} for @Config{...}

ou

#!/usr/bin/perl -l
...
print for @Config{...}

ou (requer Perl 5.10 ou superior)

use feature qw(say)
...
say for @Config{...}
    
por 13.01.2014 / 16:57
2

Como outros já disseram, bash está tentando executar seu script em vez de perl . Você também pode tentar usar:

#!/usr/bin/env perl

Em vez do seu shebang atual para ver se perl o pega.

    
por 13.01.2014 / 17:18