<?xml version="1.0" encoding="windows-1252"?>
<node id="231698" title="Efficient Linked Lists" created="2003-01-31 15:00:14" updated="2005-08-14 19:13:14">
<type id="115">
perlquestion</type>
<author id="124014">
Ionizor</author>
<data>
<field name="doctext">
&lt;p&gt;I'm trying to create a pair of hashes so that I can easily traverse a list of filenames in either direction. The code I've come up with follows. Does anybody know a more efficient way to do this? Preferably so that I can remove the ugly "do first case, loop by index, do last case" thing I've got. I'd prefer one loop but didn't want to put a pair of ifs inside that will only be used once each.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# populate filename array
my @filenames = qw(file1 file2 file3 file4 file5 file6);

my %next;
my %prev;

# Link next to first filename
$next{$filenames[0]} = $filenames[1];

# Link next and prev to all the filenames
for (my $fileindex = 1; $fileindex &lt; scalar (@filenames) - 1; $fileindex++) {
  $next{$filenames[$fileindex]} = $filenames[$fileindex + 1];
  $prev{$filenames[$fileindex]} = $filenames[$fileindex - 1];
}

# Link prev to last filename
$prev{$filenames[-1]} = $filenames[-2];
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Thanks, monks.&lt;/p&gt;

&lt;p&gt;--
&lt;br&gt;Grant me the wisdom to shut my mouth when I don't know what I'm talking about.&lt;/p&gt;</field>
</data>
</node>
