vui lòng xem mã sau trước tiên.Làm thế nào tôi có thể lưu trữ và truy cập một filehandle trong một lớp Perl?
#! /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;
Mục đích của tôi là lưu trữ một tệp xử lý trong lớp bằng cách sử dụng hàm băm. các tập tin xử lý là không xác định lúc đầu, nhưng có thể được initilized sau đó bằng cách gọi chức năng Setfd. sau đó viết có thể được gọi để thực sự viết chuỗi "hello word" vào một tập tin được chỉ định bởi các tập tin xử lý, cho rằng xử lý tập tin là kết quả của một thành công "viết" mở.
nhưng trình biên dịch perl chỉ than phiền rằng có lỗi cú pháp trong dòng "in". bất cứ ai trong bạn có thể cho tôi biết có gì sai ở đây không? cảm ơn trước.
Một số lưu ý phụ, sử dụng bất kỳ những phong cách đặt tên để hiển thị tốt hơn tách từ: 'setFd' hoặc' set_fd' hoặc 'SetFd'. Giữ một kiểu viết hoa nhất quán, hoặc là 'write' và' set_fd' hoặc 'Write' và' Set_Fd' (tôi gợi ý cái cũ). Cũng trong Perl của nó một "tập tin xử lý" không phải là một "mô tả tập tin" vì vậy bạn muốn 'set_fh'. Cuối cùng, bật cảnh báo (hoặc 'sử dụng cảnh báo' hoặc đặt' -w' trong dòng '#!') Nó sẽ tiết lộ một lỗi trong hàm tạo của bạn. – Schwern
Ngoài ra, 'sử dụng nghiêm ngặt', vì nó đã tiết lộ lỗi không phải cú pháp-nhưng-có thể-không-ý-gì-bạn này trong dòng mã này' $ self _-> {_ fd} = $ fd; ' –
@ Schwern: cảm ơn lời khuyên của bạn. –