Perl で、URL の自動リンクをしたい

以前私は正規表現を使っていたが、 URI::Find とそれにピッタリのモジュールを発見。以来こちらに移行。 使用するモジュール
use URI::Find;
#!/usr/bin/perl

sub urlToLink {

    use URI::Find;
    my $text = shift;

    my $finder = URI::Find->new(
        sub {
            my($uri, $orig_uri) = @_;
            return qq|<a href="$uri">$orig_uri</a>|;
        });
    $finder->find(¥$text);

    return $text;
}

1;
以前私は正規表現を使っていたが、 URI::Find とそれにピッタリのモジュールを発見。以来こちらに移行。 使用するモジュール
use URI::Find;
#!/usr/bin/perl

sub urlToLink {

    use URI::Find;
    my $text = shift;

    my $finder = URI::Find->new(
        sub {
            my($uri, $orig_uri) = @_;
            return qq|<a href="$uri">$orig_uri</a>|;
        });
    $finder->find(¥$text);

    return $text;
}

1;

Perl で、ファイルをロック・アンロックする方法

ファイルのロックアンロックは、flock 関数を使う方法もあるが、この方法はすべてのプラットフォームで使えるというわけではない。 そのため、OS のシンボリックリンク機能を使う。OS がファイルを作成するときに排他制御を行うのを利用する。空のファイルを作成し、そのファイルが存在するかどうかチェックする方法と一見変わらないように見えるが、この方法だとファイルをオープンし、クローズするという2ステップが必要となる。このため、完全な排他にはならない。よって、シンボリックリンクというところがミソである。シンボリックリンクの他には、ディレクトリを作成する方法、ファイル名を変更する方法もあるが、私が知る限りはこの方法を紹介しているサイトが多いように思う。 使用するモジュール
なし
#!/usr/bin/perl

our $HOME_DIR = 'ホームディレクトリをここに書く';
our $LOCK_DIR = "$HOME_DIR/lock";     # このディレクトリのアクセス権は 777 である。
our $LOCK_FILE = 'ロックするファイル名をここに書く。なんでもよい。';

sub file_lock {
   my $wait = 5;
   while (!symlink(".","$HOME_DIR/$LOCK_DIR/.$LOCK_FILE"))   {
       if (--$wait <= 0) {
           # &error('現在他の方が使用中です。しばらくしてから再度ご利用ください。');
       }
       sleep (1);
   }
}

sub file_unlock {
   unlink ("$HOME_DIR/$LOCK_DIR/lock/.$LOCK_FILE");
}

1;
ファイルのロックアンロックは、flock 関数を使う方法もあるが、この方法はすべてのプラットフォームで使えるというわけではない。 そのため、OS のシンボリックリンク機能を使う。OS がファイルを作成するときに排他制御を行うのを利用する。空のファイルを作成し、そのファイルが存在するかどうかチェックする方法と一見変わらないように見えるが、この方法だとファイルをオープンし、クローズするという2ステップが必要となる。このため、完全な排他にはならない。よって、シンボリックリンクというところがミソである。シンボリックリンクの他には、ディレクトリを作成する方法、ファイル名を変更する方法もあるが、私が知る限りはこの方法を紹介しているサイトが多いように思う。 使用するモジュール
なし
#!/usr/bin/perl

our $HOME_DIR = 'ホームディレクトリをここに書く';
our $LOCK_DIR = "$HOME_DIR/lock";     # このディレクトリのアクセス権は 777 である。
our $LOCK_FILE = 'ロックするファイル名をここに書く。なんでもよい。';

sub file_lock {
   my $wait = 5;
   while (!symlink(".","$HOME_DIR/$LOCK_DIR/.$LOCK_FILE"))   {
       if (--$wait <= 0) {
           # &error('現在他の方が使用中です。しばらくしてから再度ご利用ください。');
       }
       sleep (1);
   }
}

sub file_unlock {
   unlink ("$HOME_DIR/$LOCK_DIR/lock/.$LOCK_FILE");
}

1;

Perl で、JPEG の画像を扱う方法

グラフィックライブラリである GD を使用する。GD は PNG をサポート JPEG は必須だと思われるがその場合には (CPANの GD ではなくライブラリの) GD 自体、jpeg6b というライブラリが必要である。ない場合はインストールが必要である。ウェブでの JPEG 画像の表示は、以下のサンプルを参考に、宿題として考えてみて欲しい。 使用するモジュール
use GD;
#!/usr/bin/perl

use GD;
open (OLD, "original.jpg") || die "cannot open mayon.jpg¥n";
$oldImage = newFromJpeg GD::Image(¥*OLD) || "Cannot make old image object¥n";

@bound = $oldImage->getBounds();
print "original width: $bound[0] original height: $bound[1] ¥n";
$newImage = new GD::Image(40, 40) || die "cannot make new image object¥n";
$newImage->copyResized($oldImage, 0, 0, 0, 0, 40, 40, $bound[0], $bound[1]);
open NEW, ">nail.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;

1;
グラフィックライブラリである GD を使用する。GD は PNG をサポート JPEG は必須だと思われるがその場合には (CPANの GD ではなくライブラリの) GD 自体、jpeg6b というライブラリが必要である。ない場合はインストールが必要である。ウェブでの JPEG 画像の表示は、以下のサンプルを参考に、宿題として考えてみて欲しい。 使用するモジュール
use GD;
#!/usr/bin/perl

use GD;
open (OLD, "original.jpg") || die "cannot open mayon.jpg¥n";
$oldImage = newFromJpeg GD::Image(¥*OLD) || "Cannot make old image object¥n";

@bound = $oldImage->getBounds();
print "original width: $bound[0] original height: $bound[1] ¥n";
$newImage = new GD::Image(40, 40) || die "cannot make new image object¥n";
$newImage->copyResized($oldImage, 0, 0, 0, 0, 40, 40, $bound[0], $bound[1]);
open NEW, ">nail.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;

1;

自分のマシン (開発環境)