2

I am very new to perl and I have been given the task of maintaining a webpage. I have found a bug that I do not know how to fix.

The perl script stops on the following code.

my @failedTests = (sort(keys ($TestResultsData{$currPlatform}{$currDate}{failedtests})));
while ( @failedTests )
{
 ...

The error message is:

Type of argument to keys on reference must be unblessed hashref or arrayref.

Can that line of code be re-written so that it works?

toolic
  • 57,801
  • 17
  • 75
  • 117
AlexN
  • 45
  • 1
  • 5

1 Answers1

3

The value of $TestResultsData{$currPlatform}{$currDate}{failedtests} is a blessed hashref. keys cowardly refuses to operate on blessed hashrefs because it would break the illusion of encapsulation and overloading.

(Older versions of Perl wouldn't accept a hashref at all - you needed to pass it a proper hash.)

Try manually dereferencing the hashref into a hash using:

my @failedtests = sort keys %{ $TestResultsData{$currPlatform}{$currDate}{failedtests} };
tobyink
  • 13,478
  • 1
  • 23
  • 35