The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl

use strict;
use warnings;
use Test::More tests => 7;
use File::Spec;
use Iterator::Diamond;

-d 't' && chdir 't';

my $id = "30-edit";

unlink( "$id.tmp", "$id.tmp~" );

open(my $f, '>', "$id.tmp")
  or die("$id.tmp: $!\n");
print { $f } "Hello, World1!\n";
print { $f } "Hello, World2!\n";
print { $f } "Hello, World3!\n";
ok(close($f), "creating $id.tmp");

@ARGV = ( "$id.tmp" );
my $it = Iterator::Diamond->new( edit => '~' );
my @lines = ();
while ( <$it> ) {
    s/ll/xx/g;
    print;
}

@ARGV = ( "$id.tmp" );
$it = Iterator::Diamond->new;
@lines = ();
while ( <$it> ) {
    push(@lines, $_);
}

for my $j ( 1 .. 3 ) {
    is(shift(@lines), "Hexxo, World$j!\n", "line$j");
}

@ARGV = ( "$id.tmp~" );
$it = Iterator::Diamond->new;
@lines = ();
while ( <$it> ) {
    push(@lines, $_);
}

for my $j ( 1 .. 3 ) {
    is(shift(@lines), "Hello, World$j!\n", "line$j");
}

unlink( "$id.tmp", "$id.tmp~" );