2011-10-28 16 views
29

Tôi đang mong đợi:Lỗi trong autodie.pm của perl?

#!/usr/bin/perl 
use autodie; 
# autodie in effect here 
{ 
    no autodie; 
    # autodie is not in effect here 
} 
# autodie should be in effect here because of the supposedly lexical scope 
# of autodie, but this doesn't die: 
open my $i, '<', '/nonexistent'; 

tôi căn cứ rằng trên perldoc autodie nói rằng:

Các "autodie" pragma có phạm vi từ vựng, có nghĩa là chức năng và thủ tục con thay đổi với "autodie" sẽ chỉ thay đổi hành vi của họ cho đến khi kết thúc khối bao quanh, tệp hoặc "eval"

Ngoài ra, { no autodie } (trong phạm vi) thậm chí là một phần của cư xử SYNOPSIS

use/no warnings như tôi mong đợi:

#!/usr/bin/perl 
use warnings; 
{ 
    no warnings; 
} 
# This *does* generate a warning 
print undef; 

tôi đã bỏ lỡ một cái gì đó hay bạn đồng ý có một lỗi trong autodie? Tôi không tìm thấy bất cứ điều gì trong autodie buglist

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi 

EDIT: bây giờ tôi đã nộp a bug report

+2

Đã xác nhận trong Perl v5.14.2 (x86_64). –

Trả lời

9

tôi có thể tái sản xuất này với v5.10.0 (Debian x86_64) và ActiveState 5.14.2.

Hãy thử this location để có báo cáo lỗi.

EDIT Tôi đã thử nghiệm một số: để phá vỡ các vấn đề cho đến khi lỗi được cố định, bạn sẽ cần phải use autodie một lần nữa:

use strict; 
use autodie; 

do { 
    no autodie; 
    # ... 
} while(0); 

use autodie; 

open FILE, '<', '/non-existing'; # dies again. 
+0

Cảm ơn, có trong nhiệm vụ của tôi cho một kịch bản tái tạo đơn giản, tôi cũng đã phát hiện ra rằng 'sử dụng autodie;' một lần nữa là một workaround. Quên để đặt nó trong bài mặc dù. –

4

Các Tóm tắt không thực sự hiển thị các chỉ thị có phạm vi từ vựng , nhưng nó được đề cập nhiều lần ở nơi khác trong tài liệu. Đây rõ ràng là một lỗi.

Câu hỏi trở thành: Liệu lỗi này vẫn tồn tại?

$ perl -E'use autodie; say $autodie::VERSION' 
2.1001 

$ perl -we'use autodie; { no autodie; } open(my $fh, "<", "nonexistant");' 

$ perl -we'use autodie; open(my $fh, "<", "nonexistant");' 
Can't open 'nonexistant' for reading: 'No such file or directory' at -e line 1 

$ perl -we'{ use autodie; } open(my $fh, "<", "nonexistant");' 

Vâng, đúng vậy. Tuy nhiên, chỉ có no autodie; bị hỏng. Thật kỳ lạ, phiên bản autodie mới hơn phiên bản hiện có trên CPAN ?! Vì vậy, tôi đã hạ cấp và thử lại.

$ perl -E'use autodie; say $autodie::VERSION' 
2.10 

$ perl -we'use autodie; { no autodie; } open(my $fh, "<", "nonexistant");' 

$ perl -we'use autodie; open(my $fh, "<", "nonexistant");' 
Can't open 'nonexistant' for reading: 'No such file or directory' at -e line 1 

$ perl -we'{ use autodie; } open(my $fh, "<", "nonexistant");' 

Có thể gửi các lỗi bằng cách sử dụng autodie bug tracker.

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