#!/usr/bin/perl use strict; use warnings; use 5.010; sub even { return $_[0] % 2 == 0 } sub hausnummer_liste { my $nummer = shift; my @liste; # Nummern sind ; getrennt $nummer =~ /;/ and @liste = split( /;/, $nummer ) and return @liste; # Nummern sind 1-42 oder 1-1f if ( my ( $von, $vona, $nach, $nacha ) = $nummer =~ /^(\d+)([a-z])?-(\d+)([a-z])?$/i ) { if ( $vona || $nacha ) { push @liste,$von if not $vona; # Nummer ohne Suffix auch merken push @liste, "$von$_" for ( ( $vona || 'a' ) .. ( $nacha || 'z' ) ); # Suffixreihe erzeugen return @liste; } else { # gerade Nummern even($von) and even($_) and push @liste, $_ for ( $von .. $nach ); # ungerade Nummern !even($von) and !even($_) and push @liste, $_ for ( $von .. $nach ); return @liste; } } else { return $nummer; } } say for hausnummer_liste('1;3;99'); say ""; say for hausnummer_liste('1a-1e'); say ""; say for hausnummer_liste('1-7'); say ""; say for hausnummer_liste('2-11'); say ""; say for hausnummer_liste('11a;12;13-1'); say ""; say for hausnummer_liste('42');