Как узнать, какой тип аргументов передается в функцию - PullRequest
1 голос
/ 11 ноября 2010

Подпрограмма получает хэш-ссылку:

sub test { 
  my $hash_ref = shift ; 

   if ( $hash_ref->{app} ) {
   ... 

   }

TheHash ref выглядит следующим образом: Как узнать, какой тип данных имеет

#scallar
$hash {app} = 'app' ;
(or)
#array
$hash {app} = ['app1' ,'app2' ,'app3'];
(or)
#hash
$hash {app} = { app1 => { type => 1, contact=> abc }}
(or)
#array +hash 
$hash {app} = [{ app1 => { type => 1, contact=> abc }} ,
               { app2 => { type => 2, contact=> ded }}]

Как обработать этот типструктура данных

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

Посмотрите на это:

use strict;
use warnings;

my $hash1 = {key => 'app',};
my $hash2 = {key => ['app1', 'app2'],};
my $hash3 = {key => {app1 => {type => 1, contact => 'abc'}},};
my $hash4 = {key => [{app1 => {type => 1, contact => 'abc'}}, {app2 => {type => 2, contact => 'ded'}}],};
my %tests = (1 => $hash1, 2 => $hash2, 3 => $hash3, 4 => $hash4);

while (my ($test_nr, $test_hash) = each %tests) {
    if (!ref $test_hash->{key}) {
        print "test $test_nr is scalar\n";
    } elsif (ref $test_hash->{key} eq 'HASH') {
        print "test $test_nr is hash ref\n";
    } elsif (ref $test_hash->{key} eq 'ARRAY') {
        if (ref $test_hash->{key}[0]) {
            print "test $test_nr is array of hash refs\n";
        } else {
            print "test $test_nr is array\n";
        }
    }
}
1 голос
/ 11 ноября 2010

Если вы предоставите ссылку, вы можете проверить тип с помощью ref:

my %hash = ( app => ['app1' ,'app2' ,'app3'] );
print ref($hash{app}), "\n";

отпечатков ARRAY.

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