Как я могу получить имя файла, читаемого в Perl? - PullRequest
2 голосов
/ 15 июля 2009

В следующем шаблоне Perl:

while(<>) {
  # do stuff
}

есть ли способ получить имя файла, который сейчас открыт?

Просто для ясности, я ожидаю получить много аргументов, так что цикл будет обрабатывать более одного файла. Я хочу, чтобы имя файла в настоящее время обрабатывалось.

Ответы [ 3 ]

16 голосов
/ 15 июля 2009

Хранится в

$ARGV

См. perldoc perlvar :

  • $ ARGV

    содержит имя текущего файла при чтении из <>.

Однако, если вы получаете от STDIN, вы получите только '-'

Существует также дополнительное обсуждение дескриптора пустого файла в perldoc perlop

2 голосов
/ 15 июля 2009

$ ARGV содержит имя файла, используемого в <>.

2 голосов
/ 15 июля 2009

Если вы используете Linux, вы можете взглянуть на файл, на который указывает /proc/self/fd/0.

Редактировать: Ответ исправлен для ясности: приведенное выше полезно, но только в тех случаях, когда ввод для сценария perl читается из stdin. Это можно определить, прочитав $ARGV, как описано в ответах выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...