SPUG: Variable in subroutines to check number of args?

John Costello cos at indeterminate.net
Thu Jul 13 13:48:43 PDT 2006


On Wed, 12 Jul 2006, Yitzchak Scott-Thoennes wrote:

> On Wed, Jul 12, 2006 at 02:31:58PM -0700, John Costello wrote:
> > On Wed, 12 Jul 2006, Tim Maher wrote:
> > > 
> > > You can use the following to load a variable with what you want:
> > > 
> > >    my $argc = @_; # get #-of-elements from @_ (sub-argument) array
> > 
> > How painfully obvious.
> > 
> > May I distract all of you with the 'use bytes' pragma while I run away?
> 
> The use bytes pragma is almost never a good thing to use; you're not,
> are you?

I was using 'use bytes' for a brief period.

I'm converting data from shift-jis to unicode as part of a conversion of
data from ${UNSUPPORTED-UNDOCUMENTED-PSEUDO-DB-APPLICATION} (or UUPDA 
for short) to SAP.

I don't control the specifications for the upload into SAP, which may be 
why I have a shred of sanity left.

Did I mention that UUPDA is a Japanese-language application, and that I'm 
dealing with romaji and kanji characters?  That's where things become 
interesting.

The data files for upload to SAP are fixed-length records.  Why?  They 
just are.  Field #47 for kanji version of the company name needs to be, 
oh, let's say 100 characters.  I use 

	$record .= substr ( ( $k_company . (" " x 100) ), 0, 100);

to append the kanji company name to $record and pad the rightmost part of 
the field with blank spaces.  I could do this other ways with 'length' but 
I chose not to.

The catch is that 1 kanji character may occupy more than 1 byte.  When
output to a datafile, the record sometimes is 100 characters and sometimes
is longer--depending on how many bytes the kanji characters take.  This
should be okay if the data is read on a character-by-character basis, but
becomes an issue if the person doing the SAP upload switches from reading
things on a character-by-character basis to a byte-by-byte basis.  Throws 
everything off, in fact.

And switch is what they did.  So, I was looking at using 'use bytes' to 
output things based on byte length rather than character length.  
Fortunately (for me), someone else stepped in and told the SAP uploader 
coder to go back to character-by-character uploads.  Saved me the trouble 
of recoding parts of a longish program that were working fine.

I'm enjoying unicode and the challenge, but forgetting very obvious things 
like '$args = @_;' and the difference between the 'decaf' coffee tub and 
the 'regular like nature intended' coffee tub.

John
"Unicode is fun--you just have to define fun correctly."--Programming Perl



More information about the spug-list mailing list