2013-02-24 17 views
8

Tôi đã cài đặt 5.14.2 trong máy nhưng khi tôi cố gắng thực hiện lệnh in với từ khóa say, nó sẽ cho tôi lỗi.tại sao tôi phải chỉ định "tính năng sử dụng: 5.1x" ngay cả khi cài đặt perl của tôi là 5.14?

Tôi đã đi với từ khóa sử dụng để làm cho chương trình chạy mà không có lỗi.

#!/usr/bin/perl 
use feature ':5.10'; 
say "hello"; 

5.14.2 là mới nhất khi so sánh với 5.010 vì vậy cần có tất cả các tính năng được bật theo mặc định? thì điểm trong việc chỉ định phiên bản bằng cách sử dụng từ khóa use là gì?

Trả lời

5

Nó ngăn xung đột với các chương trình hiện có được viết bằng Perl.

Ví dụ: giả sử tôi đã viết chương trình cho Perl 5.6 được xác định là chương trình con được gọi là say.

use strict; 
use warnings; 
sub say { print 1; } 
say(); 

đó làm việc tốt (xuất ra), và nó vẫn hoạt động trong perls bao gồm các tính năng say.

Bây giờ hãy cho phép bản địa say và xem những gì sẽ xảy ra:

use v5.14; 
use strict; 
use warnings; 
sub say { print 1; } 
say(); 

Bây giờ nó té ngã hơn với * Sử dụng giá trị uninitialized $ _ ở nói tại - dòng 5. *

Bạn cần phải use feature hoặc use v5.xx để các tính năng mới có thể được tải một cách an toàn, tức là khi tác giả biết anh ta muốn sử dụng chúng.

+0

có nghĩa là không phân biệt bất kỳ phiên bản mới nhất nào của perl, tất cả sẽ hoạt động theo một cách thông thường trừ khi bạn chỉ định phiên bản nào sẽ sử dụng. và một khi bạn chỉ định phiên bản, nó sẽ kích hoạt các tính năng đó cho bạn. Vậy điều đó có nghĩa là các phiên bản 5.8 và 5.10 của tôi sẽ giống nhau mà không có tính năng 'use'command – chidori

+0

Đó là ý tưởng cơ bản, vâng. Tuy nhiên, sử dụng tính năng hoặc phiên bản chỉ để bật tính năng MỚI. Lỗi hoặc tính năng sai đôi khi bị xóa với chu kỳ không dùng nữa. Vì vậy, một cảnh báo trong 5.8 có thể là một thất bại trong 5,10. – stu42j

10

Perl cố gắng duy trì khả năng tương thích ngược. Có thể các tập lệnh hiện tại có thể có các chương trình con có tên là say. Có một cuộc thảo luận đáng kể đang diễn ra về việc liệu một số phiên bản tương lai của Perl có nên ngăn chặn những nỗ lực này và hợp lý hóa nội bộ của nó hay không. Xem, ví dụ: naming and numbering perl.

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