Грешка в синтаксиса на 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]: =: не е намерен
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/bin/perl

person jasonfungsing    schedule 07.11.2011
comment
същата грешка, както писах по-горе - person crackerplace; 08.11.2011