[Roma.pm] Prototipi e riferimenti

Flavio Poletti flavio at polettix.it
Thu Aug 7 03:50:49 PDT 2008


Ciao,

   a seguito della discussione sui prototipi disturbata da chili di
carbonara & co, un piccolo test (in fondo all'email).

Sostanzialmente l'uso di \$ implica che venga sempre passato un
riferimento al parametro attuale. Nel caso di un riferimento ad hash,
quindi, viene passato un riferimento al riferimento, pertanto occorre
effettuare due livelli di dereferenziazione.

Marco: tutto sommato, vista la sub che devi scrivere, ti conviene
avvalerti del fatto che @_ contiene alias ai parametri attuali e regolarti
di conseguenza:

   sub sv {
      $_[0] = $_[1] and return unless ref $_[0];

      # Qui scrivi la tua funzione secondo il tuo stile...
      my $ref = shift;
      #...
   }

-----8<-------

#!/usr/bin/perl
use strict;
use warnings;

sub proto (\$) {
   my $param = shift;
   print "param: $param\n";
   print "real param: $$param\n" if ref $param;
   return;
}

my $scalar = 'ciao';
proto($scalar);

my $object = bless {}, 'Whatever';
proto($object);

my $href = {};
proto($href);

# proto({ciao => 'a tutti'});  # errore in compilazione

__END__
poletti at Polebian:~/tmp$ perl proto.pl
param: SCALAR(0x812eb64)
real param: ciao
param: REF(0x815ec60)
real param: Whatever=HASH(0x812e180)
param: REF(0x815ebac)
real param: HASH(0x812e294)



More information about the Roma mailing list