Memo/Perl


jcode.pl 2.13 で構文エラー


構文チェック

perl -c example.pl

正規表現


正規表現で最短一致

cpanより便利なcpanm(cpanminus)を使う

utf8メール送信

#!/usr/bin/perl -w

use strict;
use utf8;
use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
use MIME::Base64;
use Net::SMTP;

our %EMAIL_OPTIONS = (
	'from' => 'from@example.com'	# 送信元メールアドレス
	, 'to' => 'to@example.com'	# 送信先メールアドレス
	, 'subject' => 'テスト'		# 件名
	, 'message' => "1行目\n2行目\n"	# 本文
	, 'smtp_host' => 'localhost'	# smtp host(default:localhost)
	, 'smtp_port' => '25'		# smtp port(default:25)
);

send_mail_utf8(\%EMAIL_OPTIONS);

# utf-8でメール送信
sub send_mail_utf8 {
	my $option = shift;

	# メールヘッダ
	my $mail_header = '';
	# UTF-8とbase64エンコード
	$mail_header .= "MIME-Version: 1.0\n";
	$mail_header .= "Content-type: text/plain; charset=UTF-8\n";
	$mail_header .= "Content-Transfer-Encoding: base64\n";

	# 送信元
	$mail_header .= sprintf("From: %s\n", $option->{'from'});

	# 宛名
	$mail_header .= sprintf("To: %s\n", $option->{'to'});

	# 件名をエンコード
	$mail_header .= 'Subject: ' . '=?utf-8?B?' . encode_base64($option->{'subject'}, '') . "?=\n";

	# メールヘッダの終わり
	$mail_header .= "\n";

	# SMTPでメールを送る。
	my $SMTP=Net::SMTP->new(
		$option->{'smtp_host'}
		,Port=>$option->{'smtp_port'}
	);
	if (!$SMTP) {
		die "Error : Can not connect to mail server.\n";
	}
	$SMTP->mail($option->{'from'});
	$SMTP->to($option->{'to'});
	$SMTP->data();
	$SMTP->datasend($mail_header);
	$SMTP->datasend( encode_base64($option->{'message'}) );
	$SMTP->dataend();
	$SMTP->quit;
}

utf8対応

コマンドラインオプション

複数行のコメントアウト

CPANミラーサイトの選び方

CPANモジュールインストール時に自動でデフォルトを選択

$ cpan
cpan> o conf prerequisites_policy follow
cpan> o conf commit
cpan> quit

または

echo -e "o conf prerequisites_policy follow\no conf commit\nquit\n" | perl -MCPAN -e shell

CPANディレクトリを探す

CPAN設定ファイル

/usr/lib/perl5/5.8.8/CPAN/Config.pm
-rw-r--r-- 1 root root 1344 Feb 24  2009 /usr/lib/perl5/5.8.8/CPAN/Config.pm

コマンドライン電卓

CPANの再設定

cpan> o conf init

自動インストール

yes '' | perl -MCPAN -e 'install MODULE_NAME'

cpanコンソール

# perl -MCPAN -e shell

バージョンを指定してインストール

最新バージョンだと不具合が出る場合等に。

  1. http://search.cpan.org/ から該当モジュールを探す
  2. 「Download」リンクからURLをコピーし、古いバージョンはファイル名を消せば一覧として見える
  3. authors/id/ 以下を取り出す
    P/PE/PETDANCE/ack-1.58.tar.gz
  4. インストール
    cpan P/PE/PETDANCE/ack-1.58.tar.gz

インストール済みモジュール一覧

日本語HTMLマニュアルを作成する

  1. Perl5 日本語マニュアルからTexinfo 形式でダウンロードする。
  2. 展開する
    tar xvfz perl5.000texi-j.tar.gz
  3. texi2html を用い、htmlに変換する
    texi2html -split section perl-ja.texi

ワイルドカードを使う

以下の方法では、テキストファイルをカレントディレクトリとその1階層下から探し、@files変数に格納します。

my(@files) = grep { -f $_ } map { (-f $_) ? $_ : glob($_) } ("*.txt", "*/*.txt");

ファイルパスを分解する

use File::Specモジュールを使います。

use File::Spec;
my($path) = "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE";
my($volume, $directories, $file) = File::Spec->splitpath( $path );
print "$volume, $directories, $file";

結果:

C:, \Program Files\Microsoft Office\OFFICE11\, EXCEL.EXE

複雑な変数の中身を表示する

Data::Dumperモジュールが便利です。
ソース形式でダンプしてくれるので、ファイルに書き込めば、変数内容を簡単に復元できます。

use Data::Dumper;
Dumper(変数名へのリファレンス);
Dumper(\$_);
Dumper(\@_);
Dumper(\%_);

省略

初期値

# 初期値 上書きするには our $VAR1 = "hoge";
unless( defined($VAR1) ) { our $VAR1 = 'init var'; }

添付ファイル: fileperlmodule.cgi 2079件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38