http://qs321.pair.com?node_id=1141962


in reply to sprintf: using nested code

Hi mhearse,
I'm struggling to make nested code work inside sprintf. Can someone advise?
1. My candy advise, DO NOT BE extremely CLEVER! Simply use your for loop outside the sprintf

2. However, if you want to do want you want to do, because you are using perl, then instead of using a subroutine or an eval, why not use a do{...} like so: not REALLY tested

#!/usr/bin/perl -w use strict; my %hash = ( son => { year => 2006, name => 'Paul', }, father => { year => 1981, name => 'Ryan', }, mother => { year => 1978, name => 'Bose', }, ); print sprintf( "%s: %s", 'Person' . $/, do { ## <== note here my $order; for ( sort keys %hash ) { $order .= join ' | ' => $_, %{ $hash{$_} }, $/; } $order; } );
check perldoc -f do
from your CLI to see why this over eval.

3. IMHO, don't be too clever about your program. A simple program often save the day!

UPDATE:
Apparently, while I was still trying to frame my answer to this, BrowserUk came up first! ++!
If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me