#!/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; } }