http://www.perlmonks.org?node_id=853124


in reply to Re: Question on format statement
in thread Question on format statement

Hello,

It was the space before "." causing the problem. Putting it in the 1st column solved the problem. Thanks a lot everyone.

perl seeker

Update

I however want to ask another question regarding the code. Is it possible to use several other conditional checks (if statements) to write separate blocks, of data onto the output .doc file? Using the same code I mean. Putting another if statement inside the for loop does not work and the output data rows get mixed up. For example:
$sub1='FB'; $tow1='RP'; $ph3='3'; if (($subdvn eq $sub1) && ($tow eq $tow1) && ($phase eq $ph3)) { write(FS); $fb_rp_3_tot += $amount; $fbqty3 = $fbqty3 + 1; }
Is there something like a case statement in Perl? Any help would be appreciated.

Replies are listed 'Best First'.
Re^3: Question on format statement
by roboticus (Chancellor) on Aug 05, 2010 at 13:40 UTC

    perl_seeker:

    I'm not quite sure what you're asking here. But for a case statement, I just use the simple tried and true:

    if ('foo' eq $val) { # process case 1 } elsif ('bar' eq $val or 'baz' eq $val) { # process case 2 } elsif ('boom' eq $val) { # process case 3 } else { print "Unexpected value '$val'!\n"; }

    Just add elsif blocks as needed. Not as "pretty" as a switch/case statement in other languages, but it's simple and clear.

    The way your question is phrased makes me think you might have meant "how do you use different format statements within a page?". To do that, you do something like:

    use FileHandle; format foo_rec = FOO @>>>>>>> $flds[3] . format dflt_rec = @<<<<<<< @>>>>>>> @>>>>> @>>>>> $flds[2] $flds[3] $flds[5] $flds[9] . while (<FH>) { my @flds = split /\|/, $_; if ($flds[0] eq 'foo') { format_name FS "foo_rec"; write FS; } else { format_name FS "dflt_rec"; write FS; } }

    ...roboticus