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 {
   # 配列でなかった
}
人気記事ランキング
目安箱バナー