2008-12-10 35 views
27

Có thể lấy số dòng nguồn hiện tại trong Perl không? Tương đương trong C++ là __LINE__.Làm cách nào để in số dòng nguồn trong Perl?

+0

Tôi tự hỏi: tại sao bạn cần điều này? –

+3

Tôi đã sử dụng nó để nhanh chóng theo dõi tiến trình thông qua một quá trình rất dài, và để kiểm tra thứ tự được thực hiện, như breakpoint nhưng không sử dụng trình gỡ lỗi –

+0

@LeonTimmermans: Tôi đang trả lời nhận xét rất cũ của bạn về lý do tại sao một Perl lập trình viên có thể muốn _ _FILE_ _ và _ _ LINE _ _. Về cơ bản, cùng một lý do tại sao một lập trình viên C/C++ có thể muốn họ. Ví dụ. hôm nay tôi đã tái cấu trúc một bài kiểm tra để Bài kiểm tra :: Sự khác biệt :: eq_or_diff được gọi trong một chương trình con. Số dòng được báo cáo nằm trong chương trình con không phải là nơi mà chương trình con được gọi. Việc thêm __ LINE __ vào tên thử nghiệm sẽ giúp tôi tìm thấy bài kiểm tra không thành công. Bây giờ nếu tôi chỉ có thể viết một macro CODE_LOCATION trong Perl5. –

Trả lời

51
print "File: ", __FILE__, " Line: ", __LINE__, "\n"; 

hoặc

warn("foo"); 
+4

cảnh báo sẽ in trên STDERR. – mat

6

Lưu ý có một Gotcha với

perl -e'warn ("foo")'

foo tại dòng -e 1.

nếu nó kết thúc bằng một dòng mới nó sẽ không in dòng số

perl -e'warn ("foo \ n")'

foo

Đây là tài liệu trong "perldoc -f die", nhưng có lẽ dễ dàng bỏ lỡ trong phần "perldoc -f cảnh báo" tham chiếu đến phần ...

1

Điều này in ra dòng bạn đang ở đâu, và cũng "stack" (danh sách các dòng từ các chương trình gọi điện thoại (kịch bản/modules/etc) dẫn đến việc ngay từ bây giờ bạn)

while(my @where=caller($frame++)) { print "$frame:" . join(",",@where) . "\n"; } 
1

"sử dụng cá chép" và chơi với các thói quen khác nhau và bạn cũng nhận được một ngăn xếp - không chắc chắn nếu cách này tốt hơn hoặc tệ hơn phương pháp "người gọi" được đề xuất bởi cnd. Tôi đã sử dụng các biến LINE và FILE (và có lẽ các biến tương tự khác) trong C và Perl để hiển thị nơi tôi có trong mã và thông tin khác khi gỡ lỗi nhưng đã thấy ít giá trị bên ngoài môi trường gỡ lỗi.

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