Hi,
chromatic wrote:
> On Mon, 2005-06-13 at 17:07 +0200, Ingo Blechschmidt wrote:
>> # No problem:
>> my $data = BEGIN {
>> my $fh = open "some_file" err...;
>> =$fh;
>> };
>>
>> # Problem;
>> my $fh = BEGIN { open "some_file" err... };
>> # Compile-time filehandle leaked into runtime!
>> say =$fh;
>
> Perhaps I'm being very naive, but why is this a problem? Maybe it's
> not the best way to do something, but I can see it being useful in
> some circumstances.
sorry I was unclear, the problem is:
Consider you want to first compile a program to a .pbc on host1, and
then run it on host2:
host1 $ echo hi > some_file # Make sure "some_file"
# exists on host1.
host1 $ cat > program.p6
my $fh = BEGIN { open "some_file" err... };
say =$fh
^D
host1 $ pugs -o program.pbc program.p6 # Hypothetical syntax
# "some_file" is opened at compile-time, and an IO handle object
# is returned. $fh contains an IO object now.
# In the resulting program.pbc, there's no call to open() [1].
host1 $ scp program.pbc host2:. # Copy program.pbc to host2
# "some_file" does not exist on host2:
host2 $ ls -l some_file
ls: some_file: No such file or directory
host2 $ parrot program.pbc
# XXX! Tries to readline() from an invalid filehandle!
# Additionally, "some_file" doesn't exist on host2...
Do you see the problem? IO objects are only valid in the same process.
But the compiler process and the execution process are/may be
decoupled, or may even be on different computers.
--Ingo
[1] Similar as in this example:
my $compiled_at = BEGIN { time };
say "I was compiled at $compiled_at seconds after the epoch.";
If you compile this to a .pbc, there won't be a call to time(),
but the whole BEGIN block is substituted by the return value of
time(). So, what the Perl 6 compiler will actually compile to
PIR is:
my $compiled_at = 172001560.613011;
say "I was compiled at $compiled_at seconds after the epoch.";
(Of course, a smart compiler can optimize this further.)
--
Linux, the choice of a GNU | To understand recursion, you must first
generation on a dual AMD | understand recursion.
Athlon! |