#!/usr/bin/env perl use warnings; use strict; sub scan_handle_for_rev { my $filehandle = shift; my $first_line = 1; my $max_id; while (<$filehandle>) { if (/rev(\d+)/) { if ($first_line) { $first_line = 0; $max_id = $1; } else { $max_id = $1 if ($1 > $max_id); } } } return $max_id; } use Test::More; { open my $fh, '<', \<<'END_TEST_INPUT' or die $!; | |-- action.txt | `-- rev2 | `-- rev1.html `-- add.html END_TEST_INPUT is scan_handle_for_rev($fh), 2; close $fh; } { open my $fh, '<', \<<'END_TEST_INPUT' or die $!; |--action | |-- action.txt | `-- rev1 | | `-- rev1.html | `-- rev2 | `-- rev1.html `-- add.html END_TEST_INPUT is scan_handle_for_rev($fh), 2; close $fh; } { open my $fh, '<', \<<'END_TEST_INPUT' or die $!; |--action | |-- action.txt | `-- rev1 | | `-- rev1.html | `-- rev13 | | `-- rev1.html | `-- rev2 | `-- rev1.html `-- add.html END_TEST_INPUT is scan_handle_for_rev($fh), 13; close $fh; } done_testing;