Timo, Noted!...However, one could work that into his code.
<CODE> #!/usr/bin/perl -wl use strict; my @voo = ("boon", 12, "man"); # note this 3 elements array die "Must be even elements" if @voo % 2; my %coo = @voo; while(my ($key, $val) = each %coo){ $line.="$key => $val\n"; } print $line; Emeka On Sat, Jul 30, 2011 at 3:09 PM, timothy adigun <2teezp...@gmail.com> wrote: > 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 >> >> >> * >> > > -- *Satajanus Nig. Ltd *