Perl: Operacje na pliku podanym na wejściu

Co trzeba zrobić aby można było wykonywać operacje na pliku podanym na wejściu ? Chodzi mi o to aby skrypt perla nie zawierał odnośnika do konkretnego pliku tylko wykonywał zawarte instrukcje dla jakiegoś pliku podanego akurat przez uzytkownika np. po komunikacie “podaj nazwę pliku” . Dopiero się uczę :slight_smile:

Bardzo prosto

my $filename = ... # pobierasz nazwę pliku, powiedzmy, że masz ją w zmiennej $filename

open my $fh, MODE, $filename;

I teraz masz uchwyt $fh do pliku $filename. Po szczegóły dotyczące funkcji open odsyłam pod http://perldoc.perl.org/functions/open.html

Próbowałam tak:

#!/usr/bin/perl

use strict;

use warnings;

print "podaj nazwę pliku:"

my $filename=; 

open($a,"<",$filename) or die "nie podano pliku";

my @tablica = <$a>; 

foreach (@tablica){

print "to jest zawartość pliku \n $_";

}

close ($a);

i w tym przypadku wyrzuca błąd: syntax error at line 5, near "my " Global symbol “$filename” requires explicit package name at line 5. Global symbol “$filename” requires explicit package name at line 6. oraz tak:

#!/usr/bin/perl

use strict;

use warnings;

print "podaj nazwę pliku:"

open(my $a,"<",STDIN) or die "nie podano pliku";

my @tablica = <$a>; 

foreach (@tablica){

print "to jest zawartość pliku \n $_";

}

close ($a);

i to wyrzuca błąd:

syntax error at line 5, near “open”

Co robię źle ? :slight_smile:

Brak średnika na końcu 4 linijki w obu przypadkach

Racja :slight_smile: po korekcie ten pierwszy skrypt dochodzi do pobrania nazwy z STDIN i wybija “nie podano pliku at line 6, line 1.” mimo, że podaję nazwę pliku, który istnieje. Czemu tak się dzieje?

Pobierając nazwę, w zmiennej zapisuje się też znak nowej linii, możesz użyć http://perldoc.perl.org/functions/chomp.html aby się go pozbyć