2009-05-22 29 views

Trả lời

26

Từ perldoc -f -B:

Các -T-B tắc làm việc như sau. Khối đầu tiên hoặc do đó tệp được kiểm tra đối với các ký tự lẻ chẳng hạn như mã kiểm soát hoặc ký tự lạ với bộ bit cao. Nếu quá nhiều ký tự lạ (> 30%) được tìm thấy, đó là tệp -B; nếu không, đó là tệp -T. Ngoài ra, bất kỳ tệp nào chứa null trong khối đầu tiên được coi là tệp nhị phân. Nếu -T hoặc -B được sử dụng trên filehandle, bộ đệm IO hiện tại được kiểm tra thay vì khối đầu tiên. Cả hai -T-B trả về true trên một tệp rỗng hoặc tệp tại EOF khi thử nghiệm tệp thủ công. Vì bạn phải đọc một tệp để làm bài kiểm tra -T, trên hầu hết các trường hợp bạn muốn sử dụng số -f đối với tệp trước, như trong " next unless -f $file && -T $file".
+1

Có cơ hội sử dụng ký tự bộ nhớ cache ma thuật "_": "tiếp theo trừ khi -f $ tệp và -T _" –

10

Theo Chương 11 của cuốn sách Learning Perl:

Câu trả lời là ** Perl lừa **: nó mở tập tin, nhìn vào đầu tiên vài ngàn byte, và làm cho một giáo dục đoán . Nếu nó thấy rất nhiều byte null, các ký tự điều khiển bất thường và các byte có bộ bit cao, thì nó trông giống như một tệp nhị phân. Nếu không có nhiều thứ lạ, thì nó trông giống như văn bản. Đôi khi nó đoán sai. Nếu một tệp văn bản có nhiều từ tiếng Thụy Điển hoặc tiếng Pháp (có thể có các ký tự đại diện với bộ bit cao, như một số biến thể ISO-8859 hoặc thậm chí là phiên bản Unicode), nó có thể đánh lừa Perl khai báo nhị phân. Vì vậy, nó không hoàn hảo, nhưng nếu bạn cần tách mã nguồn của bạn khỏi các tệp đã biên dịch hoặc các tệp HTML khỏi PNG, các thử nghiệm này sẽ thực hiện thủ thuật.
+0

Tôi không biết liệu tôi có xem xét "gian lận" hay không. Nó không giống như thực sự có cách nào tốt hơn. – friedo

+0

cũng vì có mở tệp, loại gian lận của nó, không phải bạn nghĩ – TStamper

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