deshaw
asked on
How to declare Perl format for dynamically changing in variable length
Hi Experts,
Currently we are writing Perl script where we need to use Perl format for displaying output in particular format. We don't want to use sprintf as it is errorprone and want to use only Perl format. We are facing below problem:
Suppose I want to define my Perl format then I am using below code:
my ( $len1, $len2, $len3, $len4 ) = (0,0,0,0);
my ( $var1, $var2, $var3, $var4 ) = ( );
#We have to declare above variables before declaring format
my $srcheader = "format SRCHEADER = \n" .
'@' . '>' x $len1 . " " . '@' . '<' x $len2 . ": " . '@' . '<' x $len3 . '@' . '<' x $len4 . "\n" .
'$var1, $var2, $var3, $var4' . "\n" .
".\n";
Where we $len1 to $len4 to be dynamically change in program so that when we execute below code, we should get desire output:
$len1 = 45 if ( $ALLSTATS );
$len2 = length($config);
$len3 = length($SRC_COUNT{$config} );
my $srcinfo = " ";
$srcinfo = "(Source : $SYNC_SRC)" unless ( $OLD_LOGS );
$len4 = length($srcinfo);
print "( $len1, $len2, $len3, $len4 )\n";
$var1 = "Configuration";
$var2 = $config;
$var3 = $SRC_COUNT{$config};
$var4 = $srcinfo;
eval $srcheader;
die $@ if $@;
select(STDOUT);
$~ = $srcheader;
write();
Here problem is : though we have updated $len1 to $len4 values it is taking the first defined values (0,0,0,0) but it is working fine for $var1 to $var4. Could any one tell what is the problem.
Thanks.
Currently we are writing Perl script where we need to use Perl format for displaying output in particular format. We don't want to use sprintf as it is errorprone and want to use only Perl format. We are facing below problem:
Suppose I want to define my Perl format then I am using below code:
my ( $len1, $len2, $len3, $len4 ) = (0,0,0,0);
my ( $var1, $var2, $var3, $var4 ) = ( );
#We have to declare above variables before declaring format
my $srcheader = "format SRCHEADER = \n" .
'@' . '>' x $len1 . " " . '@' . '<' x $len2 . ": " . '@' . '<' x $len3 . '@' . '<' x $len4 . "\n" .
'$var1, $var2, $var3, $var4' . "\n" .
".\n";
Where we $len1 to $len4 to be dynamically change in program so that when we execute below code, we should get desire output:
$len1 = 45 if ( $ALLSTATS );
$len2 = length($config);
$len3 = length($SRC_COUNT{$config}
my $srcinfo = " ";
$srcinfo = "(Source : $SYNC_SRC)" unless ( $OLD_LOGS );
$len4 = length($srcinfo);
print "( $len1, $len2, $len3, $len4 )\n";
$var1 = "Configuration";
$var2 = $config;
$var3 = $SRC_COUNT{$config};
$var4 = $srcinfo;
eval $srcheader;
die $@ if $@;
select(STDOUT);
$~ = $srcheader;
write();
Here problem is : though we have updated $len1 to $len4 values it is taking the first defined values (0,0,0,0) but it is working fine for $var1 to $var4. Could any one tell what is the problem.
Thanks.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
print "format SRCHEADER = \n".
'@' . '>' x $len1 . " " . '@' . '<' x $len2 . ": " . '@' . '<' x $len3 . '@' . '<' x $len4 . \
"\n" .
'$var1, $var2, $var3, $var4' . "\n" .
".\n";
eval "format SRCHEADER = \n".
'@' . '>' x $len1 . " " . '@' . '<' x $len2 . ": " . '@' . '<' x $len3 . '@' . '<' x $len4 . \
"\n" .
'$var1, $var2, $var3, $var4' . "\n" .
".\n";
}
srcheader();
select(STDOUT);
$~ = "SRCHEADER";
write();