Поскольку Рэй спросил, я решил переписать всю свою программу без использования неявности Perl (кроме использования <ARGV>
; это трудно написать вручную). Это, вероятно, сделает людей Python счастливее (несмотря на скобки :-P):
while (my $line = <ARGV>) {
chop $line;
$line =~ s/#.*//;
next unless $line =~ /\S/;
@fields = (split ' ', $line)[0,1];
print join(' ', @fields), "\n";
}
Я что-то пропустил? Надеюсь, что нет. Файловый дескриптор ARGV
является особенным. Он вызывает чтение каждого именованного файла в командной строке, если только он не указан, и в этом случае он читает стандартный ввод.
Редактировать: О, я забыл. split ' '
тоже волшебно, в отличие от split / /
. Последний просто соответствует пробелу. Первый соответствует любому количеству пробелов. Это магическое поведение используется по умолчанию, если для split
не указан шаблон. (Кто-то скажет, , но как насчет /\s+/
? ' '
и /\s+/
схожи, за исключением того, как обрабатываются пробелы в начале строки. Так что ' '
действительно волшебно.)
Мораль этой истории в том, что Perl великолепен, если вам нравится много магического поведения. Если у вас нет этого бара, используйте Python. : -Р