Синтаксическая ошибка Perl: пример программы для чтения файла

Я получаю сообщение об ошибке при чтении файла, а ниже приведен сценарий.

#!/bin/bash
$file = "SampleLogFile.txt";    #--- line 2 
open(MYINPUTFILE,$file);        #--- line 3  
while(<**MYINPUTFILE**>) { 

# Good practice to store $_ value because
# subsequent operations may change it.
my($line) = $_;

# Good practice to always strip the trailing
# newline from the line.
chomp($line);

# Convert the line to upper case.
print "$line" if $line = ~ /sent/;

}
close (MYINPUTFILE);

Вывод:

PerlTesting_New.ksh[2]: =: not found
PerlTesting_New.ksh[3]: синтаксическая ошибка в строке 3: `(' неожиданно

Есть идеи, в чем проблема?


person crackerplace    schedule 07.11.2011    source источник


Ответы (3)


Изменять

#!/bin/bash

to

#!/usr/bin/perl

В противном случае Perl не будет интерпретировать ваш скрипт. Измените путь соответственно в соответствии с вашей системой

person parapura rajkumar    schedule 07.11.2011
comment
Строка интерпретатора '!#/usr/bin/env perl' полезна для поиска Perl везде, где его можно найти в вашем PATH. - person JRFerguson; 07.11.2011
comment
Я новичок, и все та же ошибка, хотя я изменился в соответствии с - person crackerplace; 07.11.2011
comment
Как вы вызываете скрипт? - person choroba; 07.11.2011
comment
@whokares: это не ksh-скрипт, это perl-скрипт. Вызовите его с помощью perl scriptname.ksh. Желательно также изменить имя на scriptname.perl (или .pl, или .prl). - person choroba; 08.11.2011
comment
@choroba О, чувак... Ты уволил его.. Большое спасибо.. Это было так запутанно.. Теперь все работает. - person crackerplace; 08.11.2011

Хорошо, тот, кто учит вас писать на Perl, должен покинуть девяностые.

#!/usr/bin/perl

use strict;   # ALWAYS
use warnings; # Also always.  

# When you learn more you can selectively turn off bits of strict and warnings
# functionality  on an as needed basis.


use IO::File; # A nice OO module for working with files.

my $file_name = "SampleLogFile.txt"; # note that we have to declare $file now.

my $input_fh = IO::File->new( $file_name, '<' );  # Open the file read-only using IO::File.

# You can avoid assignment through $_ by assigning to a variable, even when you use <$fh>   

while( my $line = $input_fh->getline() ) { 

    # chomp($line); # Chomping is usually a good idea.  
                    # In this case it does nothing but screw up 
                    # your output, so I commented it out.

    # This does nothing of the sort:
    # Convert the line to upper case.
    print "$line" if $line = ~ /sent/;

}

Вы также можете сделать это с помощью одного вкладыша:

perl -pe '$_ = "" unless /sent/;'  SampleLogFile.txt

См. perlrun для получения дополнительной информации об однострочниках.

person daotoad    schedule 07.11.2011

хм, ваша первая строка: #!/bin/bash

/bin/bash : это оболочка Bash.

Возможно, вам придется изменить на

!/USR/бен/перл

person jasonfungsing    schedule 07.11.2011
comment
та же ошибка, что я написал выше - person crackerplace; 08.11.2011