ページ更新: 2005-03-06 (日) (5128日前)
[編集]

文字列変数中の変数を置き換える #

2005-03-11

Perlでの文字列内変数の扱いについて より。

  • ""の働きをネストしたい→ "" と qq (""と同等) をネストする。
  • 実行時に評価したい→eval。
#!/usr/bin/perl

$message = 'Hi $name, nice to meet you.';  #この文字列は実際にはファイルから読み込んだりする。
$name = 'discypus';
$replaced1 = eval "qq{$message}";
$replaced2 = eval qq{"$message"};

print "message='", $message, "'\n";
print "replaced1='", $replaced1, "'\n";
print "replaced2='", $replaced2, "'\n";
$ ./replace.pl
message='Hi $name, nice to meet you.'
replaced1='Hi discypus, nice to meet you.'
replaced2='Hi discypus, nice to meet you.'
[編集]

MD5 Digest #

インストール

$ perl -MCPAN -eshell
cpan> m /Digest::Perl/
CPAN: Storable loaded ok
Module          Digest::Perl::MD4 (O/OT/OTAKA/Digest-Perl-MD4-1.4.tar.gz)
Module          Digest::Perl::MD5 (D/DE/DELTA/Digest-Perl-MD5-1.5.tar.gz)
2 items found
cpan> install Digest::Perl::MD5
  : (略)
cpan> bye

サンプル

use Digest::Perl::MD5 'md5_hex';
print "Digest (MD5) is ", md5_hex('foobarbas'), "\n";

実行結果

Digest (MD5) is 6df23dc03f9b54cc38a0fc1483df6e21
[編集]

ファイルの内容をまるごと変数に入れる #

毎回忘れて、perldocを紐解く羽目になるので。

open FILE, 'filepath' or die;
{
    local $/;
    $slurp = <FILE>;
}
close FILE;
[編集]

改行が入った文字列のマッチング #

行ごとの処理:multiline (^や$を使うとき)

s/^[ \t]+//gm;      # 行の先頭のホワイトスペースを消す

行をまたがった処理:singleline

s|/\*.*?\*/||gs;    # 「/* */」形式のコメントを消す。

行を意識しない処理

s/[\n]+/\n/g;       # 改行が連続していたら、1つにする。
[編集]

リストに4個の数値(それぞれbyte値)が入っているとき、それをbig endian 32-bit int に変換する。 #

my @list = ( 0x31, 0x32, 0x33, 0x34, );
my $value = unpack 'N', pack 'C*', @list;
printf "value (hex) = %d (%X)\n", $value, $value;

$ perl test.pl
value (hex) = 825373492 (31323334)
[編集]

STDIN, STDOUTなどがttyに結び付けられているかどうか調べる #

-t
-t STDOUT

perldoc -f -t