Поскольку while (<>)
является сокращением для while(defined($_ = <ARGV>))
, но <>;
это просто <ARGV>;
.Это можно увидеть с помощью модуля B::Deparse
.
Учитывая файл example.pl
#!/usr/bin/perl
use strict;
use warnings;
<>;
while (<>) {
}
, команда
perl -MO=Deparse example.pl
будетprint
use warnings;
use strict 'refs';
<ARGV>;
while (defined($_ = <ARGV>)) {
();
}
example.pl syntax OK
Это пример знаменитого Perl DWIM ery.Я полагаю, что это было сделано, чтобы помешать людям делать расточительный
for (<>) {
}
Нет особого смысла в специальном корпусе <>
в пустом контексте, и, на самом деле, это может быть вредно, так как, когда вы говорите1026 * вы чаще всего пытаетесь выбросить ненужную строку из дескриптора файла.$_
поймать это было бы неэффективно и не желательно.