2011-08-21 13 views
7

Tại sao tên biến được theo sau bởi dấu gạch dưới không được đánh giá đúng trong khi nội suy chuỗi trong Perl?Tại sao tên biến được theo sau bởi dấu gạch dưới không được đánh giá đúng trong khi nội suy chuỗi trong Perl?

my $i = 3; 

print "i = $i\n"; # works, prints "i = 3" 
print "_i = _$i\n"; # works, prints "_i = _3" 
print "i_ = $i_\n"; # FAILS, prints "i_ = " 
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _" 
+10

[! Luôn luôn sử dụng nghiêm ngặt và luôn luôn sử dụng cảnh báo] (http://joelslinux.blogspot.com/2011/06/use-strict-and-warnings.html) –

Trả lời

18

$i_ là một định danh hợp lệ, vì nó đang cố gắng để in giá trị của biến đó (mà bạn chưa thiết lập, vì vậy nó là undef).

Bật strictwarnings.

+0

Tôi nhận thấy phật của bạn, Mat. Có lẽ điều này sẽ khiến bạn quan tâm: https://github.com/buddhabrot/buddhabrot (Tôi không thể liên hệ với bạn theo bất kỳ cách nào khác vì vậy tôi phải tìm một bình luận vô tội ở đâu đó). – buddhabrot

7

Mat là đúng. Nếu bạn thực sự cần nhấn mạnh ngay sau khi sử dụng giá trị dấu gạch chéo ngược: "$i\_".

+2

'print 'i_ ='. $ i. "_ \ n"; ' –

+5

Tôi thích' $ {i} 'hơn dấu gạch chéo ngược, vì chúng làm những việc khác nhau trong các ngữ cảnh khác. – tchrist

+1

@tchrist, bạn có thể xây dựng không? – Itamar

23

Bên cạnh những câu trả lời khác, bạn có thể sử dụng cú pháp thay thế cho các biến định:

print "i_ = ${i}_\n"; 

Lưu ý việc sử dụng dấu ngoặc nhọn: {} để xác định tên biến. Bất cứ khi nào nghi ngờ, bạn có thể chọn không cho cú pháp này.

3

Luôn luôn sử dụng sau đây:

use strict; 
use warnings; 
Các vấn đề liên quan