При возврате 2 или более значений из подпрограммы определены только последние переменные - PullRequest
0 голосов
/ 04 января 2019

В настоящее время я пишу небольшой скрипт на Perl, чтобы действовать как cronjob.

Задача подпрограммы состоит в том, чтобы проверить, является ли файл, в который я пишу, действительным файлом json или нет, а затем продолжить работу на основе возврата этой подпрограммы и вывода другой подпрограммы.

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

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

(извините за плохое форматирование ...)

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Data::Dumper;


sub is_valid_json {

 my $readJson = do {
     open(my $readJson, "+<", "../data_out.json")
         or die("Can't open \$filename\": $!\n");
     local $/;
     <$readJson>
 };

 my $json = JSON->new;

 eval {

     my $result = $json->decode($readJson);
     my $JsonValidationStatus = 1;

     return($JsonValidationStatus,$readJson );
 } or do {
     warn "Failed to decode_json result";
     print "mission failled";
     my $JsonValidationStatus = 0;
     return($JsonValidationStatus, $readJson);
 };
}

 my ($JsonValidationStatus, $readJson) = is_valid_json();
 print "One:". Dumper  "$JsonValidationStatus\n";
 print  "Two:" . Dumper "$readJson\n";
 print "\n \n \n \n";

пс. извините забыл предоставить сообщение об ошибке:

Использование неинициализированного значения $ readJson в конкатенации (.)

...