2009-05-22 15 views

Odpowiedz

26

Od perldoc -f -B:

Prace -T i -B przełączniki następująco. Pierwszy blok lub , tak więc plik jest sprawdzany pod kątem nieparzystych znaków, takich jak dziwne kody sterujące lub znaki z ustawionym wysokim bitem. Jeśli zostanie znalezionych zbyt wiele dziwnych znaków (> 30%), jest to plik -B; w przeciwnym razie jest to plik -T. Ponadto każdy plik zawierający wartość null w pierwszy blok jest traktowany jako plik binarny. Jeśli na uchwycie pliku używany jest -T lub -B , bieżący bufor IO jest badany raczej jako niż pierwszy blok. Zarówno -T, jak i -B zwracają true przy pliku zerowym lub pliku o numerze EOF podczas testowania uchwytu pliku. Ponieważ musisz przeczytać plik, aby wykonać test -T, w większości przypadków chcesz najpierw użyć pliku -f w stosunku do pliku, jak w " next unless -f $file && -T $file".
+1

Istnieje możliwość użycia magicznego znaku cache statystycznego "_": "następny, chyba że -f $ plik i -T _" –

10

Zgodnie z rozdziałem 11 książki Learning Perl:

odpowiedź brzmi ** Perl oszukuje **: otwiera plik, wygląda na pierwszych kilku tysięcy bajtów, i sprawia, zgaduje . Jeśli widzi wiele pustych bajtów, nietypowych znaków kontrolnych i bajtów z ustawionym wysokim bitem, to wygląda jak plik binarny. Jeśli nie ma zbyt wiele dziwnych rzeczy, to wygląda na tekst. Czasami domysły są błędne. Jeśli plik tekstowy zawiera dużo szwedzkich lub francuskich słów (które mogą mieć znaki reprezentowane z ustawionym wysokim bitem, jak niektóre ISO-8859 - coś w tym wariancie, a może nawet w wersji Unicode), może oszukać Perla w deklarowaniu binarnym. Więc nie jest idealny, ale jeśli potrzebujesz oddzielić swój kod źródłowy od skompilowanych plików lub plików HTML od PNG, te testy powinny załatwić sprawę.
+0

Nie wiem, czy mógłbym wziąć pod uwagę to "oszustwo". To nie jest tak, że jest naprawdę lepszy sposób. – friedo

+0

dobrze, ponieważ tam otwierania pliku, jego rodzaj oszustwa, nie myślisz – TStamper

Powiązane problemy