2013-11-22 15 views
8

Sau đây không chết:tại sao tôi có thể mở undef?

open my $in, '<', undef or 
    die q{couldn't open undef}; 
print <$in>; 

Không thực hiện điều này:

open my $in, '>', undef or 
    die q{couldn't open undef}; 
print $in 'hello'; 

Tôi không hiểu tại sao không ai trong số những chết. Làm cách nào để mở undef có thể thành công? Lý do tôi tìm thấy này là một chàng trai tôi làm việc với đã làm điều này:

open my $in, '>', $ARGV[0] or die q{couldn't open $ARGV[0]}; 

Ông nghĩ rằng điều này sẽ giết kịch bản nếu không có đối số được thông qua trong (Tôi biết điều này không phải là cách sạch nhất để làm nhưng tôi không nghĩ rằng nó sẽ không hoạt động).

Tôi đang sử dụng Strawberry 5.16.1.

+2

Xem http://www.perlmonks.org/?node_id=799021 – ThisSuitIsBlackNot

Trả lời

10

Xem perldoc -f open:

Là một trường hợp đặc biệt theo hình thức ba tranh cãi với một chế độ đọc/ghi và đối số thứ ba là undef:

open(my $tmp, "+>", undef) or die ... 

mở ra một filehandle đến một tạm thời ẩn danh tập tin.

+2

Tôi cũng nghĩ vậy, nhưng nó không được mở/đọc. Tôi nghi ngờ đó là hành vi không có giấy tờ liên quan đến điều này nhưng tôi không chắc chắn về điều đó. – Oesor

+0

Tôi có thể xác nhận rằng Perl 5.10.1 và 5.18.1 đều hoạt động theo cách này, với ''>'' cũng như ''+>''. Nó có thể là thú vị để biết phiên bản của Perl làm điều này. – Jander

+5

@Oesor Nó hoạt động cho tất cả các chế độ: chỉ đọc, chỉ ghi, đọc-ghi. Trong mọi trường hợp, sẽ mở một tệp tạm thời ẩn danh. Nhưng chế độ chỉ đọc hoặc chỉ ghi không có ứng dụng thực tế. –

Các vấn đề liên quan