use strict; use warnings; use Test::More; my @set = ( { file => '-/yf/-/22211_01_09_2000_XYz.pdf', zip => '22211' }, { file => '_/gt/-/02239_04_04_1989_PkW.pdf', zip => '02239' }, { file => '-/xy/-/02239_04_04_1989_PkW.pdf', zip => '02239' }, ); plan tests => 2 * @set; for my $datum (@set) { is zip_substr ($datum->{file}), $datum->{zip}, "Substr for $datum->{file}"; is zip_regex ($datum->{file}), $datum->{zip}, "Regex for $datum->{file}"; } sub zip_substr { return substr (shift, 7, 5); } sub zip_regex { my ($zip) = shift =~ m#/(\d{5})_#a; return $zip; }