proszę najpierw zapoznać się z następującym kodem.Jak mogę przechowywać i otwierać uchwyt pliku w klasie Perla?
#! /usr/bin/perl
package foo;
sub new {
my $pkg = shift;
my $self = {};
my $self->{_fd} = undef;
bless $self, $pkg;
return $self;
}
sub Setfd {
my $self = shift;
my $fd = shift;
$self_->{_fd} = $fd;
}
sub write {
my $self = shift;
print $self->{_fd} "hello word";
}
my $foo = new foo;
Moim zamiarem jest przechowywanie uchwytu pliku w klasie przy użyciu skrótu. uchwyt pliku jest początkowo niezdefiniowany, ale można go później zainicjować, wywołując funkcję Setfd. następnie write można wywołać, aby faktycznie napisać ciąg "hello word" do pliku wskazanego przez uchwyt pliku, zakładając, że uchwyt pliku jest wynikiem sukcesu "write" open.
, ale kompilator perl po prostu narzeka, że w linii "print" wystąpił błąd składniowy. Czy ktokolwiek z was może mi powiedzieć, co jest nie tak? z góry dziękuję.
Kilka uwag niepożądane, należy użyć dowolnej z tych stylów nazewnictwa, aby lepiej pokazać słowo separacji: 'setFd' lub' set_fd' lub 'SetFd'. Zachowaj spójny styl wielkich liter - "write" i "set_fd" lub "Write" i "Set_Fd" (sugeruję ten pierwszy). Również w Perlu jest to "uchwyt pliku", a nie "deskryptor pliku", więc chcesz 'set_fh'. Na koniec włącz ostrzeżenia ("używaj ostrzeżeń" lub wstaw '-w' w linii' #! '), Które ujawnią błąd w twoim konstruktorze. – Schwern
Dodatkowo, 'użyj ścisłego', ponieważ ujawniłoby to ten nie-syntaktyczny-ale-prawdopodobnie-nie-jaki-masz-słowny błąd w tym wierszu kodu' $ self _-> {_ fd} = $ fd; ' –
@ Schwern: dzięki za twoją radę. –