Не удается прочитать содержимое входного файла, содержащее знак %

#perl #input

#perl #ввод

Вопрос:

У меня простой ввод открытого файла, как показано ниже, и у меня нет проблем с чтением содержимого из входного файла, но оно не совсем читаемо.

 open(IN,"<$modelRoot/Local_$project.pm") || die "ERROR: $!";

    while(<IN>)
    {
        $temp = $_;
        chomp($temp);
        printf "$tempn";
    }
  

Содержимое, которое я распечатал, выглядит нормально до точки, которая является знаком%.
Это исходное содержимое входного файла

 my %LocalToolData = (
  

Это содержимое, которое я распечатываю, оно также выдает предупреждение

 Use of uninitialized value in printf at rfinteg_v4.pl line 846, <IN> line 24.
Use of uninitialized value in printf at rfinteg_v4.pl line 847, <IN> line 24.
my 0calToolData = (
  

Вопрос: Как мне прочитать% sign из входного файла и в то же время избежать предупреждения?

Комментарии:

1. Как говорится в ответе @tadman, используйте print и нет printf , если вам действительно не нужно специально форматировать выходные данные. И еще лучше использовать say ( say "hi"; — нет необходимости в новой строке)

2. Я получаю более полезное предупреждение в perl 5.24: Missing argument in printf . Если вы используете более старую версию, рассмотрите возможность обновления.

Ответ №1:

printf форматирование выполняется с использованием % , это зарезервированный символ. Первым аргументом printf является строка шаблона, а не любая строка.

Вы должны использовать print , если не хотите использовать эту функцию.

Вы не должны использовать printf с каким-либо содержимым, содержащим % , если у вас нет соответствующих значений-заполнителей для этого.

В документации даже говорится:

Не попадайтесь в ловушку использования a printf , когда подойдет простое print . Это print более эффективно и менее подвержено ошибкам.