#!/usr/bin/env perl use strict; use warnings; my $fmt1 = "%09d %09d %5d %5d"; my $fmt2 = "#%-3d #%-3d %09d"; # User Choice my $fmt = $fmt2; my $f = 2; my $d = { 'a' => 123, 'b' => 456, 'c' => 54321, 'd' => 98765 }; my $e = { 'a' => 789, 'b' => 987 }; sub get_line_1 { my ($dat1) = @_; return sprintf( $fmt, $dat1->{'a'}, $dat1->{'b'}, $dat1->{'c'}, $dat1->{'d'} ); } sub get_line_2 { my ($dat1, $dat2) = @_; return sprintf( $fmt, $dat2->{'a'}, $dat2->{'b'}, $dat1->{'a'} ); } # Fake Code: Ich habe folgendes schon ausprobiert und weiß, dass es nicht # funktioniert, aber ich hatte gehofft, dass eine Lösung in dieser Richtung # existiert: Idealerweise ist es möglich die Argumente für die Formatstrings # vorzuberechnen, das kriege ich aber leider nicht hin: Unten stehender Code # liefert nur: # Useless use of a constant ("$dat1->{'a'}") in void context # Argument "$dat1->{'a'}" isn't numeric in sprintf # # my $arg1 = qw( $dat1->{'a'} $dat1->{'b'} $dat1->{'c'} $dat1->{'d'} ); # my $arg2 = qw( $dat2->{'a'} $dat2->{'b'} $dat1->{'a'} ); # # my $arg = $arg2; # # sub get_line_wunsch { # my ($dat1, $dat2) = @_; # # return sprintf( # $fmt, # $arg # ); # } # # print get_line_wunsch($d, $e), "\n"; if($f == 1) { print get_line_1($d), "\n"; } else { print get_line_2($d, $e), "\n"; }