Hi folks,<br><br>I had to scratch that itch...<br><br>I've just uploaded it to CPAN now, so it might take a while to replicate. For a sneak peak:<br><br> <a href="http://h4c.kr/Scalar-Array-0.02.tar.gz">http://h4c.kr/Scalar-Array-0.02.tar.gz</a><br>
<br>Scalar::Array will turn any arrayref into an iterator by simply using<br>the arrayref itself. Only reading is currently implemented (for now).<br><br>-- 8< --<br><br>SYNOPSIS<br><br> use Scalar::Array;<br><br> my $rr_ref = [ 1, 2, 3, 4, 5 ];<br>
<br> round_robin( $rr_ref );<br> print sa_length( $rr_ref ); # prints 5<br><br> print $rr_ref,"\n"; # prints 1<br> print $rr_ref,"\n"; # prints 2<br> print $rr_ref,"\n"; # prints 3<br> print $rr_ref,"\n"; # prints 4<br>
print $rr_ref,"\n"; # prints 5<br> print $rr_ref,"\n"; # prints 1<br> print $rr_ref,"\n"; # prints 2<br> print $rr_ref,"\n"; # prints 3<br> ... <br><br> my $s_ref = [ 1, 2, 3, 4, 5 ];<br>
<br> shrink( $s_ref );<br> print sa_length( $s_ref ); # prints 5<br><br> print $s_ref,"\n"; # prints 1<br> print $s_ref,"\n"; # prints 2<br> print $s_ref,"\n"; # prints 3<br> print $s_ref,"\n"; # prints 4<br>
print $s_ref,"\n"; # prints 5<br> print $s_ref,"\n"; # undef<br> print $s_ref,"\n"; # undef<br> print $s_ref,"\n"; # undef<br><br>-- >8 --<br><br>I would be interested in how this benchmarks compared to the previous threads but it's now 2:30am so I'm going to bed :)<br>
<br>Alfie<br><br><div class="gmail_quote">On Fri, Feb 19, 2010 at 10:38 PM, Shlomi Fish <span dir="ltr"><<a href="mailto:shlomif@iglu.org.il">shlomif@iglu.org.il</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Friday 19 Feb 2010 10:04:35 Jacinta Richardson wrote:<br>
<div class="im">> Sam Watkins wrote:<br>
> > Also, is there any way to make like an alias @foo<br>
><br>
> > for @$foo, so you can treat an array reference as a normal array without<br>
> > writing @$foo all the time? (and also for hashes)<br>
><br>
> Not in Perl 5. Yes, in Perl 6.<br>
><br>
<br>
</div>Actually, it is possible in Perl 5 - using tie:<br>
<br>
-------- CODE ------<br>
<br>
#!/usr/bin/perl<br>
<br>
use strict;<br>
use warnings;<br>
<br>
package Tie::ArrayIndirect;<br>
<br>
use base 'Tie::Array';<br>
<br>
sub TIEARRAY<br>
{<br>
my ($class, $ref) = @_;<br>
<br>
return bless {'ref' => $ref} , $class;<br>
}<br>
<br>
sub FETCH<br>
{<br>
my ($self, $index) = @_;<br>
return $self->{'ref'}->[$index];<br>
}<br>
<br>
sub FETCHSIZE<br>
{<br>
my ($self) = @_;<br>
<br>
return scalar(@{$self->{'ref'}});<br>
}<br>
<br>
sub STORE<br>
{<br>
my ($self, $index, $val) = @_;<br>
<br>
return ($self->{'ref'}->[$index] = $val);<br>
}<br>
<br>
sub EXISTS<br>
{<br>
my ($self, $index) = @_;<br>
<br>
return exists($self->{'ref'}->[$index]);<br>
}<br>
<br>
sub DELETE<br>
{<br>
my ($self, $index) = @_;<br>
<br>
return delete($self->{'ref'}->[$index]);<br>
}<br>
<br>
package main;<br>
<br>
sub return_ref<br>
{<br>
return [0,1,22,303];<br>
}<br>
<br>
my $ref = return_ref();<br>
<br>
my @array;<br>
<br>
tie @array, 'Tie::ArrayIndirect', $ref;<br>
<br>
print "array[2] = " . $array[2] . "\n";<br>
<br>
push @array, 4444.4;<br>
<br>
print "ref->[4] = ", $ref->[4], "\n";<br>
<br>
----- END CODE -----<br>
<br>
Regards,<br>
<br>
Shlomi Fish<br>
<br>
--<br>
-----------------------------------------------------------------<br>
Shlomi Fish <a href="http://www.shlomifish.org/" target="_blank">http://www.shlomifish.org/</a><br>
What Makes Software Apps High Quality - <a href="http://shlom.in/sw-quality" target="_blank">http://shlom.in/sw-quality</a><br>
<br>
Deletionists delete Wikipedia articles that they consider lame.<br>
Chuck Norris deletes deletionists whom he considers lame.<br>
<br>
Please reply to list if it's a mailing list post - <a href="http://shlom.in/reply" target="_blank">http://shlom.in/reply</a> .<br>
<div><div></div><div class="h5">_______________________________________________<br>
Melbourne-pm mailing list<br>
<a href="mailto:Melbourne-pm@pm.org">Melbourne-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/melbourne-pm" target="_blank">http://mail.pm.org/mailman/listinfo/melbourne-pm</a><br>
</div></div></blockquote></div><br>