#!/usr/bin/perl -w # This little program takes a directory as its argument and # builds an html frame page with all of the image names in one # frame and a target frame for image viewing. It leaves the # three html pages in the argument directory. print "Enter the directory with the images -- n make sure it is an absolute path (include a trailing slash):n"; $target_dir = <STDIN>; chomp $target_dir; @jpgs = glob("$target_dir*.jpg"); @gifs = glob("$target_dir*.gif"); @both = (@jpgs,@gifs); @pics = sort(@both); foreach $pic_name (@pics) { $pic_name =~ s/^$target_dir//; } open(MAIN, ">$target_dir"."index.html") or die "Can\'t create index.html: $!n"; open(LEFT, ">$target_dir"."left.html") or die "Can\'t create left.html: $!n"; open(RIGHT, ">$target_dir"."rght.html") or die "Can\'t create rght.html: $!n"; $index_html = "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN""DTD/xhtml1-frameset.dtd">n<html xmlns="http://www.w3.org/1999/xhtml">n<head>n<title>Image Index</title>n</head>n<frameset cols="20%,80%" frameborder="1" border="1">n<frame src="left.html" name="left">n<frame src="rght.html" name="right">n</frameset>n</html>n"; $right_html = "<!DOCTYPE html public "-//W3C//dtD XHTML 1.0 Transitional//EN""DTD/xhtml1-transitional.dtd">n<html xmlns="http://www.w3.org/1999/xhtml">n<head>n<title>Right</title>n</head>n<body></body>n</html>n"; $left_top = "<!DOCTYPE html public "-//W3C//dtD XHTML 1.0 Transitional//EN""DTD/xhtml1-transitional.dtd">n<html xmlns="http://www.w3.org/1999/xhtml">n<head>n<title>Left</title>n</head>n<body>n<dl>nn"; foreach $pic_name (@pics) { $pic_name = "<dt><a href = "$pic_name" target = "right">" . $pic_name . "</a></dt>n"; } $list = "@pics"; $left_bottom = "nn</dl>n</head>n<body>n"; $left_html = $left_top . $list . $left_bottom; print MAIN $index_html; print RIGHT $right_html; print LEFT $left_html; close(MAIN) or die "Can\'t close index.html: $!n"; close(LEFT) or die "Can\'t close left.html: $!n"; close(RIGHT) or die "Can\'t close rght.html: $!n";
code
Search and Replace with Perl
# Sometimes you need to change something in a bunch of files at once. # These are some command-line ways of doing that. # For universal replacement (in all files down from the current directory): find ./ -type f -exec perl -pi -e \'s/stringtofind/stringtoreplacewith/g\' {} ; # To do all ".php"s, for example: find ./ -type f -name *.php -exec perl -pi -e \'s/stringtofind/stringtoreplacewith/g\' {} ; # To find/replace in just the present directory: perl -pi -e \'s/stringtofind/stringtoreplacewith/g\
ftp with perl
#!/usr/bin/perl -w # Yet another time when dependence on libraries bit me, I had to see if # I could manage an ftp script using the core perl libraries, so I wasn\'t # dependent on Net::FTP being present in the same form on the system. # This is just my proof of concept, developed with telnet and the perl # cookbook. use IO::Socket; $remote_host = "remotehost"; $remote_port = 21; $user = "username"; $pass = "password"; $socket = IO::Socket::INET->new(PeerAddr => $remote_host, PeerPort => $remote_port, Proto => "tcp", Type => SOCK_STREAM) or die "Couldn\'t connect to $remote_host:$remote_port : $@n"; # AUTHENTICATION $answer = < $socket>; print "$answer"; print $socket "user $usern"; $answer = < $socket>; print "$answer"; print $socket "pass $passn"; $answer = < $socket>; print "$answer"; # DIRECTORY NAVIGATION print $socket "pwdn"; $answer = < $socket>; print "$answer"; # QUIT print $socket "quitn"; $answer = < $socket>; print "$answer"; # and terminate the connection when we\'re done close($socket);