#!/usr/bin/env perl use strict; use warnings; use autodie; use utf8; use constant DELAY => 2; my @ascii_texts = map "text#$_", 0 .. 9; my @unicode_texts = map "🅃🄴🅇🅃#️$_", qw{0️ 1️ 2️ 3️ 4️ 5️ 6️ 7️ 8️ 9️}; for my $i (0 .. 9) { write_ascii_log($ascii_texts[$i]); write_unicode_log($unicode_texts[$i]); sleep DELAY; } close_ascii_log(); close_unicode_log(); sub now { return scalar localtime(); } # Log file routines # Note anonymous block { my ($asc_filename, $uni_filename); BEGIN { ($asc_filename, $uni_filename) = qw{ascii.log unicode.log}; } my ($ascii_fh, $unicode_fh); sub _open_asc { open $ascii_fh, '>>', $asc_filename; $ascii_fh->autoflush(); # For demo only: print "Run 'tail -f $asc_filename' in a separate window.\n"; print 'Hit when ready: '; (undef) = scalar ; return; } sub write_ascii_log { my ($text) = @_; _open_asc() unless defined $ascii_fh; $ascii_fh->print(now(), ": $text\n"); return; } sub close_ascii_log { return unless defined $ascii_fh; undef $ascii_fh; # For demo only: print "Stop 'tail -f $asc_filename'.\n"; print 'Hit when ready: '; (undef) = scalar ; return; } sub _open_uni { open $unicode_fh, '>>:encoding(UTF-8)', $uni_filename; $unicode_fh->autoflush(); # For demo only: print "Run 'tail -f $uni_filename' in a separate window.\n"; print 'Hit when ready: '; (undef) = scalar ; return; } sub write_unicode_log { my ($text) = @_; _open_uni() unless defined $unicode_fh; $unicode_fh->print(now(), ": $text\n"); return; } sub close_unicode_log { return unless defined $unicode_fh; undef $unicode_fh; # For demo only: print "Stop 'tail -f $uni_filename'.\n"; print 'Hit when ready: '; (undef) = scalar ; return; } } #### ken@titan ~/tmp/pm_11154936_buffering $ ./log_example1.pl Run 'tail -f ascii.log' in a separate window. Hit when ready: Run 'tail -f unicode.log' in a separate window. Hit when ready: Stop 'tail -f ascii.log'. Hit when ready: Stop 'tail -f unicode.log'. Hit when ready: ken@titan ~/tmp/pm_11154936_buffering $ #### ken@titan ~/tmp/pm_11154936_buffering $ tail -f ascii.log Fri Oct 13 23:07:47 2023: text#0 Fri Oct 13 23:08:07 2023: text#1 Fri Oct 13 23:08:09 2023: text#2 Fri Oct 13 23:08:11 2023: text#3 Fri Oct 13 23:08:13 2023: text#4 Fri Oct 13 23:08:15 2023: text#5 Fri Oct 13 23:08:17 2023: text#6 Fri Oct 13 23:08:19 2023: text#7 Fri Oct 13 23:08:21 2023: text#8 Fri Oct 13 23:08:23 2023: text#9