#!/usr/bin/perl -w use strict; use File::Tail; use IO::Handle; use Encode; #use Devel::Peek; my $scan_log_file = "foo.u16"; unless (fork) { # emulate Windows file for testing open my $fh, ">:encoding(UTF-16le):crlf", $scan_log_file or die $!; $fh->autoflush(1); for (1..5) { print $fh "foo bar\n"; sleep 1; } print $fh "finished\n"; exit; } else { sleep 1; my $o_tail=File::Tail->new( name => $scan_log_file, maxinterval => 1, adjustafter => 1, ignore_nonexistant => 1, reset_tail => -1, tail => -1, ); while( my $line = $o_tail->read() ) { $line =~ s/^\0//; # fix possible char misalignment $line = decode("UTF-16le", $line); $line =~ s/\r$//; # remove \r #Dump $line; print "$line\n"; if( $line =~ m/finished/ ) { print "done.\n"; last; } } }