Emeka, Yes in a way, but the point am making here is that one can also pass hash into a subroutine. Context is everything in Perl! Caution has to be taken however when converting array into hash. Hash elements must be even in number, whereas odd numbers of elements could be in array, one is passing to the hash, thereby an generating error!
<CODE> #!/usr/bin/perl -wl use strict; my @voo = ("boon", 12, "man"); # note this 3 elements array my %coo = @voo; my $line = ""; while(my ($key, $val) = each %coo){ $line.="$key => $val\n"; } print $line; # Oops Error On Sat, Jul 30, 2011 at 8:34 AM, Emeka <emekami...@gmail.com> wrote: > > Timo, > > One can even pass hash to a subroutine with a little trick, 'cos the > default > argument of a subroutine is an array "@_". ** Check Example 2, in the code > below. > > I think this trick is formalized by context rule. > > @voo = ("boon", 12, "man", 88); > %coo = @voo; > my $line = ""; > while(my ($key, $val) = each %coo){ > $line.="$key => $val\n"; > } > print $line; > > On Sat, Jul 30, 2011 at 2:17 AM, timothy adigun <2teezp...@gmail.com>wrote: > >> Hi Rajeev, >> with the link you provided, the statement "In Perl, you can pass only one >> kind of argument to a subroutine: a scalar... a pointer (sort of)." was >> made >> Reference sub-topic. So, it will not be a total truth that one can pass >> "only" one kind of argument to subroutine. >> Generally in perl the subroutrine default argument is an array "@_", so >> that >> makes it possible to even pass arrays into subroutine! ** Check Example 1, >> in the code below. >> One can even pass hash to a subroutine with a little trick, 'cos the >> default >> argument of a subroutine is an array "@_". ** Check Example 2, in the code >> below. >> Finally, I believe that "one" the main purpose of reference in perl is to >> help maintain the integrity of data passed to a subroutine. >> In Code Example 3 below, two arrays were passed to a sub., inside the sub. >> the two array merges to one, and lost identity, then printer with just one >> for loop. >> But one can keep these array intact, using reference as demonstrated in ** >> Code Example 4! >> To write Object oriented perl one might have to know reference well! >> Really >> it like pointer or passing reference using pointer in c++. >> >> <CODES> >> >> #!/usr/bin/perl -w >> use strict; >> >> ##Example 1################# >> >> sub getter(@); #declaration of subroutine >> >> my $list=""; >> my @arr=qw( 12 timo kunle 067 23.90 come_hm); >> >> sub getter(@){ # defination of subroutine >> foreach(@_){ >> $list.="$_\n"; >> }return $list; >> } >> >> print getter(@arr); # print return value >> >> ################################################################## >> ##Example 2################# >> >> my %hash=( fistname=>'larry', surname=>'wall', >> street=>'earth', value =>'perl'); >> >> my $line=""; >> sub getter_hash{ >> my %hash=@_; # the trick convert ur @_ to %hash >> while(my ($key,$val)=each %hash){ >> $line.="$key => $val\n"; >> } >> return $line; >> } >> >> print getter_hash(%hash); >> >> ################################################################### >> ##Example 3################# >> >> sub getter3(@); #declaration of subroutine >> >> $list=""; >> my @arr1=qw( 12 timo kunle 067 23.90 come_hm); >> my @arr2=qw( US 23:46:13 local float GOP_DEBT -q34A); >> >> sub getter3(@){ # defination of subroutine >> foreach(@_){ >> $list.="$_\n"; >> }return $list; >> } >> >> print getter(@arr1,@arr2); # print return value >> >> ################################################################# >> ##Example 4################# >> >> sub getter4($$); #declaration of subroutine >> >> my $count=0; >> my @arr3=qw( 12 timo kunle 067 23.90 come_hm); >> my @arr4=qw( US 23:46:13 local float GOP_DEBT -q34A); >> >> sub getter4($$){ # defination of subroutine >> my ($val1,$val2)=@_; >> foreach(@{$val1}){++$count; >> print "$count:$_\n"; >> } $count=0; >> foreach(@{$val2}){++$count; >> print "$count:$_\n"; >> } >> } >> getter4(\@arr3,\@arr4); # print return value >> >> Regards. >> >> >> >> >> On Fri, Jul 29, 2011 at 11:57 PM, Rajeev Prasad <rp.ne...@yahoo.com> >> wrote: >> >> > Hello, >> > >> > from here: http://www.troubleshooters.com/codecorn/littperl/perlsub.htm >> > >> > i found: >> > >> > In Perl, you can pass only one kind of argument to a subroutine: a >> scalar. >> > To pass any other kind of argument, you need to convert it to a scalar. >> You >> > do that by passing a reference to it. A reference to anything is a >> > scalar. If you're a C programmer you can think of a reference as a >> pointer >> > (sort of). >> > >> > is that still true? date on website is 2003... >> > >> > thank you. >> > >> > Rajeev >> > >> > > > > -- > *Satajanus Nig. Ltd > > > * >