On Tue, Sep 25, 2001 at 08:39:06AM +0100, Piers Cawley wrote:
> Michael G Schwern <[EMAIL PROTECTED]> writes:
> [ A description of the Ruby 'block' syntax ]
>
> Note too that, adopting the block syntax would let you do:
>
> File.new($filename) { ... }
>
> Which doesn't look like much, but new could be implemented in such a
> way that, if called with a block, the constructor would simply iterate
> over the file and then explicitly close the file. Given the GC issues
> of immediate finalization being hard to do (albeit possible), using
> constructs that don't need it would surely be a Good Thing.
Other fun things I was thinking of overnight...
Instead of:
open(FILE, $file) || die "Couldn't open $file: $!";
while( read(FILE, my $buf, $length) ) {
print $buf;
}
close FILE;
you can do
File.read($filename, $length) {
print
}
implemented like so:
sub File::read {
my($filename, $length, $offset) = @_;
use POSIX qw(BUFSIZ);
$length ||= BUFSIZ;
$offset ||= 0;
open(my $fh, $filename) || die "Can't open $filename: $!";
while(read($fh, $_, $length, $offset)) {
yield;
}
close $fh;
}
Or how about character by character?
File.each_byte($filename) {
print
}
Backwards?
File.read_backwards($filename) {
print
}
How about each line seperated by the string "Peterbilt"?
my $fh = File.open($filename);
$fh.each('Peterbilt') {
print
}
Tasty.
--
Michael G. Schwern <[EMAIL PROTECTED]> http://www.pobox.com/~schwern/
Perl6 Quality Assurance <[EMAIL PROTECTED]> Kwalitee Is Job One
...and I pull out the Magnum from under the desk where I keep it in case
someone laughs at a joke that's so dry it's got a built in
water-fountain, and blow the lot of them away as a community Service.
-- BOFH