#!/usr/bin/perl -w # Name : Perl/Tk Text Viewer # Author : Terrence Ma # Email : terrence@terrence.com # Web : http://www.terrence.com # Date : 09/01/2001 # License : GNU GPL - http://www.gnu.org/copyleft/gpl.html # Warranty : No Warranty # use lib use 5; use strict; use Fcntl qw(:DEFAULT :flock); use Tk; # init variables my($top, $textview, $scrollview); # procedure get file sub getfile { my($filename, $filecontents); $filename = shift(@_); open(FILEHANDLE, "< $filename") || die "Can't read $filename: $!"; flock(FILEHANDLE, LOCK_SH) || die "Can't lock filename: $!"; # read file in one pass # see Advanced Perl Programming p.42 { local $/ = undef; # Saves previous value of $/ # substitutes it with undef $filecontents = ; # Slurp all of FILEHANDLE } $textview->delete("1.0", "end"); $textview->insert("end", $filecontents); close(FILEHANDLE); } # set top window $top = MainWindow->new(); # set widgets # configure $textview(yscrollcommand) at the end to avoid lookahead error $textview = $top->Text(bg => "white"); $scrollview = $top->Scrollbar(command => ["yview", $textview]); # check argument, get filename if (($#ARGV == 0) && (-e $ARGV[0])) { $top->title("Perl/Tk Text Viewer"); $textview->pack(side => "left"); $scrollview->pack(side => "right", fill => "y"); $textview->configure(yscrollcommand => ["set", $scrollview]); getfile($ARGV[0]); MainLoop(); } else { print("Usage: viewer.pl filename\n"); }