#!/usr/bin/env perl use strict; use warnings; use 5.016; my $fmt1 = "%09d %09d %5d %5d"; my $fmt2 = "#%-3d #%-3d %09d"; # User Choice my $f = $ARGV[0] // 1; my $d = { 'a' => 123, 'b' => 456, 'c' => 54321, 'd' => 98765 }; my $e = { 'a' => 789, 'b' => 987 }; sub get_line_wunsch_factory { my ($f) = @_; my ($fmt,$arg_extractor); if ($f == 1) { $fmt = $fmt1; $arg_extractor = sub { my ($dat1) = @_; return (@$dat1{qw(a b c d)}); } } elsif ($f == 2) { $fmt = $fmt2; $arg_extractor = sub { my ($dat1, $dat2) = @_; return ($dat2->{'a'},$dat2->{'b'},$dat1->{'a'}); } } else { die "Fuer f = $f habe ich kein Format\n"; } return sub { return sprintf($fmt,&$arg_extractor(@_)); } } my $get_line_wunsch = get_line_wunsch_factory($f); print &$get_line_wunsch($d,$e),"\n";