tomimemo
perlメモ
最終更新:
匿名ユーザー
-
view
split関数
「1234567890,hogehoge」というカンマ区切り文字列をスプリットする。split_test.plというファイル名で作成。
#!/usr/bin/perl $mojiretu = '1234567890,hogehoge'; @ret = split(/,/ , $mojiretu); print $ret[0]."と".$ret[1]."に分割されました\n";
上記スクリプトを実行してみる。
# perl split_test.pl 1234567890とhogehogeに分割されました
「1234567890|hogehoge」という「|」で分割されている場合は、エスケープしなくてはならない。
#!/usr/bin/perl $mojiretu = '1234567890|hogehoge'; @ret = split(/\|/ , $mojiretu); print $ret[0]."と".$ret[1]."に分割されました\n";
smtpメールを送ってみる
#!/usr/bin/perl # Net::SMTPを使うための宣言 use Net::SMTP; # メールサーバ名(IPだとだめ?) $mail_srv_name = 'localhost'; # FROM句 $mail_from = 'from@hogehoge.com'; # TO句 $mail_to = 'to@hogehoge.com'; # Net::SMTP インスタンス生成 $smtp = Net::SMTP->new($mail_srv_name); # 試しに2通送ってみる # 1通目 $smtp->mail($mail_from); $smtp->to($mail_to); $smtp->data(); $smtp->datasend("From: ".$mail_from."\n"); $smtp->datasend("To: ".$mail_to."\n"); $smtp->datasend("Subject: test1\n"); $smtp->datasend("Message-ID: <123456789\@hogehoge.com>\n"); $smtp->datasend("\n"); $smtp->datasend("this is test mail no1 \n"); $smtp->dataend(); # 2通目 $smtp->mail($mail_from); $smtp->to($mail_to); $smtp->data(); $smtp->datasend("From: ".$mail_from."\n"); $smtp->datasend("To: ".$mail_to."\n"); $smtp->datasend("Subject: test2\n"); $smtp->datasend("Message-ID: <987654321\@hogehoge.com>\n"); $smtp->datasend("\n"); $smtp->datasend("this is test mail no1 \n"); $smtp->dataend(); # smtp インスタンス破棄 $smtp->quit;
did not return a true value
requireやuseされたファイルは、正常にコンパイルされ、初期化コードを正しく実行したことを示すために、真を返さなければならない。こういったファイルは、
1;
で終わるようにするのが習慣らしい。1を返さないと表題のような「did not return a true value」のエラーが出る。以下例。
【ファイル構成】 hoge.pl dir/ | +--functions.pl
【hoge.pl】 #!/usr/bin/perl require "dir/functions.pl" print &sub1;
【functions.pl】 #!/usr/bin/perl sub sub1() { return "hogehoge\n"; } # これいれないとhoge.plを実行した際にエラーになる 1;
実行 perl hoge.pl hogehoge
exec関数とsystem関数
exec関数のテストコード
[exectest.pl] #!/usr/bin/perl my $command1 = "echo hoge1"; my $command1 = "echo hoge2"; exec($command1); exec($command2); print "終了\n";
exectest.plの実行結果
# perl exectest.pl hoge1
ひとつめのexecコマンドしか実行されない。制御がperl側に戻ってこないため?
system関数のテストコード
[systemtest.pl] #!/usr/bin/perl my $command1 = "echo hoge1"; my $command1 = "echo hoge2"; system($command1); system($command2); print "終了\n";
systemtest.plの実行結果
# perl systemtest.pl hoge1 hoge2 終了
echoコマンドを二つ実行したあとで、perlのprintコマンドも実行される。(制御がperl側に戻ってくる)
配列かどうか調べる
未検証だけどメモ。
if (ref($data) eq 'ARRAY') { # 配列であった } else { # 配列でなかった }