How do I unsubscribe from this email list?  I have tried several methods,
but continue to get the emails!?
----- Original Message -----
From: "Johnathan Kupferer" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, April 30, 2001 5:38 PM
Subject: Re: FileCache - use strict


> This one got under my skin so I did a little research:
>
> >      use strict;
> >      use FileCache;
> >      my $a01;
> >      $a01 = 'a01file';
> >      cacheout $a01;
> >      print $a01 "XYZ\n";
>
> It seems that perl decides that its calling print with arguments '$a01
> "XYZ\n"' and then chokes on the argument list.  Turns out that this is one
> of those ambiguites of Perl's indirect object syntax.  It caught me off
> gaurd that cacheout $a01 turns a string into a file handle, I can't say
that
> I condone such things, but nobody asked me.  Since $a01 is a file handle,
we
> can avoid using the indirect syntax by calling its print method:
>
>       use strict;
>       use IO::FileHandle;
>       use FileCache;
>       my $a01;
>       $a01 = 'a01file';
>       cacheout $a01;
>       $a01->print("XYZ\n");
>
> Notice that I had to add "use IO::FileHandle".  This is another curiosity,
> why am I able to create IO::FileHandle objects when IO::FileHandle was not
> accessable?
>
> I know the technical answer is that Perl gives me the freedom to create
any
> kind of object I want.  For example with "bless($myself, 'unicorn')" I can
> turn $myself into a 'unicorn'.  But in what sense can I consider $myself a
> 'unicorn' if I have no access to a package called 'unicorn' from which I
may
> access my methods.  Maybe I shouldn't be able to turn into a 'unicorn'
> unless I know what a 'unicorn' is.  Does anyone know of a way to catch
such
> things.
>
> It seems that "use FileCache" should imply "use IO::FileHandle" if it is
> creating such objects.  I guess what really disturbs me is that Perl isn't
> playing by the rules by only considering file handles objects in a half
> hearted sort of way.  Why bother blessing them at all if behind the seens
it
> runs open, print, close etc without consulting the IO::FileHandle modules?
>
> This seems to answer a question I had a while back.  Why does Perl bother
> with the tie function if you can create a new object that responds to all
> the methods of a file.  I think it has something to do with calling things
> like:
>
>     print $pseudo_file "stuff"
>
> would run into the same problem above and not translate to:
>
>     $pseudo_file->print("stuff");
>
> Like
>
>     $pseudo_file = new PseudoFile;
>
> translates to:
>
>     $pseudo_file = PseudoFile->new();
>
> All I can say is I hope that we see stuff like this get cleaned up in Perl
> 6.  Anyway, the above code does work and its kinda cleaner than the
indirect
> syntax anyway.
>
> - Johnathan
>
>
>

Reply via email to