2010-11-17 15 views
5
use DateTime::TimeZone::Local; 
use Test::More tests => 1; 

my @input = (1 .. 10); 
my (@output) = sort { 
    DateTime::TimeZone::Local->TimeZone(); 
    $a cmp $b 
} @input; 

is_deeply(\@output, \@input); 

Output:Script chết nếu một module mà doesnt tồn tại được sử dụng trong quá trình sắp xếp() - DateTime :: TimeZone :: dụ Local

1..1 
Can't return outside a subroutine at /usr/local/share/perl/5.8.8/DateTime/TimeZone/Local.pm line 72. 
# Looks like your test exited with 9 before it could output anything. 

shell returned 9 

Tôi đã kiểm tra và nó chắc chắn là bên trong một thói quen phụ. Có vẻ như không liên quan gì đến mô-đun được sử dụng, mã này cũng gây ra lỗi tương tự:

my @output = sort { 
    sub1(); 
} (1 .. 5); 

sub sub1 { 
    eval "use ModuleDoesntExist"; 
    return 1; # remove this and get a seg fault 
} 

Dường như đây là lỗi trong PERL nhiều hơn bất kỳ thứ gì. Bất kỳ ý tưởng? Quan tâm hơn đến lý do tại sao điều này xảy ra hơn là giải pháp thay thế - nó chỉ xảy ra nếu mô-đun không tồn tại.

+0

Hoạt động tốt ở đây. – cdhowie

+0

Chạy trên Linux, PERL phiên bản 5.8.8 - bạn? :( –

+0

Debian Lenny, Perl 5.10.0. – cdhowie

Trả lời

3

Dường như đây thực sự là lỗi trong Perl. Xem this thread trên danh sách Perl Porters.

+0

Cách giải quyết cho trường hợp cụ thể này là: local $^O = "Unix"; trước vòng lặp sắp xếp để eval không bao giờ thất bại :) –

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