2010-03-10 38 views

Trả lời

16

Thường thì các điểm đánh dấu như vậy được đưa vào mã đã được xử lý trước hoặc được tạo bằng máy móc để tham khảo lại nguồn do con người tạo ra.

Ví dụ, nếu có một chương trình chuyển đổi Python để Perl, nó có thể chèn một

# line 812 "foo.py" 

để thông báo lỗi sẽ tham khảo các mã Python ban đầu sẽ có ý nghĩa hơn đối với các lập trình viên.

7

Chúng hữu ích khi gói một tập lệnh Perl trong một tệp khác, như pl2bat. Perl không nhìn thấy các lệnh batch ở đầu của tập tin mà ném ra ý tưởng của nó về số dòng. Chỉ thị #line khi bắt đầu nguồn Perl sẽ bù đắp cho điều này.

1

Ngoài các lý do đã đề cập perl có tùy chọn -P (được khuyến khích mạnh mẽ) chạy tệp Perl thông qua bộ tiền xử lý C trước khi thực thi. Vì hầu hết các bộ tiền xử lý của C sẽ sử dụng các chỉ thị dòng khi chúng bao gồm hoặc loại bỏ một phần của một tệp nên mọi lỗi sẽ được báo cáo từ nơi chúng được đặt trong nguồn ban đầu thay vì nguồn được xử lý.

Chỉ thị dòng cũng có thể rất hữu ích nếu bạn đang tạo mã bằng các chuỗi sau đó được chuyển đến eval. Thông thường nếu có một cảnh báo hoặc lỗi trong mã như vậy bạn nhận được một báo cáo lỗi như "chết tại (eval 1) dòng 1." Sử dụng chỉ thị dòng, bạn có thể cung cấp tên tệp và số dòng hữu ích.

6

Tôi đã nhìn thấy nhiều lần mọi người viết sai số hiện tại của dòng vào chỉ thị #line. Mã này phải chứa số tiếp theo của dòng. mã ví dụ của linetest.pl (sử dụng một wrapper ksh để thiết lập một biến môi trường cho các kịch bản perl):

1 #!/usr/bin/ksh 
2 MY_ENV_VAR='something' 
3 export MY_ENV_VAR 
4 /usr/bin/perl -x $0 [email protected] 2>&1 
5 exit $? 
6 
7 #!/usr/bin/perl 
8 #line 9 
9 print "MY_ENV_VAR is $ENV{MY_ENV_VAR}\n"; 
10 die "This is line 10."; 

Chạy kịch bản và kiểm tra kết quả:

$ ./linetest.pl 
MY_ENV_VAR is something 
This is line 10. at ./linetest.pl line 10. 

Bạn có thể thấy rằng số dòng phù hợp sau khi viết #line 9 trên dòng 8.

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