Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: [Resolved?] strange list operator (tied array)

by mr_ron (Chaplain)
on Oct 09, 2015 at 15:59 UTC ( [id://1144317]=note: print w/replies, xml ) Need Help??


in reply to [Resolved] strange list operator

There sort of is a way to "implement range operator in perl source". Perl has a feature called tying that lets you implement indexing on an array yourself and lets you return something like the index of the element as the value. I have included a bare bones implementation of an array whose values are a sequence below. The solution has virtually no memory limitation on the size of the sequence.

package Tie::SeqArray; use strict; use warnings; use parent 'Tie::Array'; sub TIEARRAY { my $self = shift; my $class = ref($self) || $self; my $sequence_size = shift || die "sequence size of at least one re +quired"; return bless {seq_size => $sequence_size}; } sub FETCH { my $self = shift; my $i = shift; return $i >= 0 && $i < $self->{seq_size} ? $i +1 : undef; } sub FETCHSIZE { my $self = shift; return $self->{seq_size}; } package main; use strict; use warnings; # from Perl Cookbook http://docstore.mik.ua/orelly/perl/cookbook/ch02_ +18.htm sub commify { my $text = reverse $_[0]; $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1_/g; return scalar reverse $text; } my (@aa, @bb); tie @aa, 'Tie::SeqArray', 20_000_000; tie @bb, 'Tie::SeqArray', 20_000_000; print $aa[100], ' ', commify(scalar(@aa)), "\n"; print commify($bb[19_999_001]), ' ', commify(scalar(@bb)), "\n"; __END__ 101 20_000_000 19_999_002 20_000_000
Ron

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1144317]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (4)
As of 2024-04-19 19:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found