#!/usr/bin/perl -- use strict; use warnings; Main( @ARGV ); exit( 0 ); { use constant +{ qw{ TYPE 0 NAME 1 ACTION 2 } }; ## to undefine globals TYPE/NAME/ACTION outside of this block use namespace::clean; format OFG = @<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<< $_[TYPE], $_[NAME], $_[ACTION] . } format THREECHARFORMAT = ^<<~~ $_[0] . sub fwThree { return formatWrite( *STDOUT, "::THREECHARFORMAT", @_ ); } sub formatWrite { use IO::Handle; my $handle = shift; my $format = shift; local @_ = @_; $handle->format_name( $format ); write $handle; } sub Main { fwThree("foobar"); formatWrite( *STDOUT, "::OFG", qw/ TYPE NAME ACTION / ); formatWrite( *STDERR, "::OFG", TYPE(), NAME(), ACTION() ); } __END__ $ perl format.fill.overflow.11113982.pl foo bar TYPE NAME ACTION Undefined subroutine &main::TYPE called at format.fill.overflow.11113982.pl line 56.