ホーム » 「Perl」タグがついた投稿
タグアーカイブ: Perl
スクリプト言語の比較
Raspberry Pi で、自宅内の温湿度管理とか色々やっていて、shell や perl や python などのスクリプトを使っているけど、ただでさえ遅い Raspberry-Pi だし、少しでも軽く動いてほしくて、lua なども使っている。
でも、shell だと、bash で書いているけど、高機能な分だけ遅いし、少しでも軽くなればと、インストールされているスクリプト言語のサイズを改めて比較をしてみた。
$ ls -al <いろいろ> -rwxr-xr-x 1 root root 14000 1月 2 2021 /usr/bin/lua50 -rwxr-xr-x 1 root root 91904 12月 10 2020 /bin/dash -rwxr-xr-x 1 root root 92292 12月 22 2018 /bin/sed -rwxr-xr-x 1 root root 120704 2月 17 2020 /usr/bin/mawk -rwxr-xr-x 1 root root 133048 8月 1 2016 /usr/bin/lua5.1 -rwxr-xr-x 1 root root 974312 3月 28 2022 /bin/bash -rwxr-xr-x 2 root root 3201036 9月 25 2021 /usr/bin/perl5.32.1 -rwxr-xr-x 1 root root 4703672 3月 12 2021 /usr/bin/python3.9
個人的には、軽いスクリプトというと、sed < awk < lua < bash < perl < python というイメージで使い分けをしていた。
しかし、これを見ると、bash と dash で10倍の差、軽くなればと使っていた lua だけど、lua5.1 と lua50 でも 10 倍の差がある。perl だと bash の 3倍、python だと bash の5倍。バイナリのサイズが単純に処理速度に反映される訳ではないけど、これを見る限り、自分で書いている手抜きスクリプトであれば、dash や lua50 で動かした方がよさそうだな。
また、下手に Perl を使うぐらいなら、bash の中で sed や awk を交えながらスクリプトを書くことも多いけど、下手に bash の中で sed や awk をガシガシ使ったら、あんまり早くなさそうだな。
これからは、lua50 < dash < sed , awk < bash < perl < python かな。
Perl CPAN更新溜まってた
Perl の CPAN モジュールが溜まってた。
過去メモに沿って、更新
(( アップデート可能なモジュールを一覧 )) # perl -MCPAN -e 'CPAN::Shell->r' (( 全部をアップデート )) # perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
添付ファイル付きメールの送信
WatchOS5 を使うと、メール添付画像を見ることができるので、監視システムなどから画像付きでメールを送りたくなった。HTML形式で画像へのリンクを送っても画像はみえない。
#!/usr/bin/perl =head1 使用方法 mail-mixed.jp [options] 宛先... 標準入力をメール本文として送る -t --to 宛先 -c --cc CC宛先 -b --bcc BCC宛先 -f --from 差し出し人 -s --subject タイトル -a --attach 添付 -h --html HTML形式かどうか =cut use warnings ; use Getopt::Long ; use Jcode ; use Encode ; use utf8 ; use MIME::Lite ; use File::MimeInfo::Magic ; my $m_from = "" ; my $m_html = 0 ; my @m_attach = () ; my @m_to = () ; my @m_cc = () ; my @m_bcc = () ; my $m_body = "" ; # オプションの読み込み GetOptions( 'to=s' => \@m_to , 'cc=s' => \@m_cc , 'bcc=s' => \@m_bcc , 'from=s' => \$m_from , 'subject=s' => \$m_subject , 'attach=s' => \@m_attach , 'html' => \$m_html , ) ; # 残りのオプション To として扱う @m_to = ( @m_to , @ARGV ) ; # 標準入力はメール本文 while( ) { $m_body .= $_ ; } # メール MIME::Lite用引数 my %arg = () ; $arg{From} = $m_from ; if ( $m_html ) { # $arg{Subject} = encode( 'MIME-Header' , $m_subject ) ; # UTF-8だと文字化けするぞ # $arg{Subject} = encode( 'MIME-Header-UTF_8' , Jcode->new( $m_subject )->utf8 ) ; $arg{Subject} = encode( 'MIME-Header-ISO_2022_JP' , Jcode->new( $m_subject )->jis ) ; } else { $arg{Subject} = encode( 'MIME-Header-ISO_2022_JP' , Jcode->new( $m_subject )->jis ) ; } $arg{To} = join( ", " , @m_to ) if ( @m_to > 0 ) ; $arg{Cc} = join( ", " , @m_cc ) if ( @m_cc > 0 ) ; $arg{Bcc} = join( ", " , @m_bcc ) if ( @m_bcc > 0 ) ; $arg{Type} = 'multipart/mixed' ; # メール全体の作成 my $msg = MIME::Lite->new( %arg ) ; # メール本文の作成 if ( $m_html ) { # HTML形式ではUTF-8を使う $msg->attach( Type => 'text/html; charset="utf-8"' , Data => Jcode->new( $m_body )->utf8 ) ; } else { # それ以外は日本語ISO-2022-JP $msg->attach( Type => 'text/plain; charset="iso-2022-jp"' , Encoding => '7bit' , Data => Jcode->new( $m_body )->jis ) ; } # 添付ファイルを付ける foreach my $file ( @m_attach ) { if ( -r $file ) { my $r_file = $file ; # ファイル名のディレクトリ部を削除 $r_file =~ s/^.*\/// ; # 添付 $msg->attach( Type => mimetype( $file ) , Path => $file , Filename => $r_file , Disposition => 'attachment' ) ; } } # メールを送る $msg->send ; ### Local Variables: ### ### mode: perl ### ### End: ###
perl 5.24 で CPAN 更新たっぷり
自宅サーバなどで動かしている Perl のプログラムが エラーを吐き始めた。
どうも、日々の更新で Perl のバージョンアップで、 CPAN を使ってインストールしていた perl モジュールの 整合性が問題みたい。
ということで、インストール済み perl モジュールの更新。
(( 更新対象を表示 )) $ sudo perl -MCPAN -e "CPAN::Shell->r" (( 更新 )) $ sudo perl -MCPAN -e "CPAN::Shell->install(CPAN::Shell->r)"
色々と使っている自宅サーバ、Raspberry-Piサーバは、 100件を越える更新で、すごく時間がかかった。
古い Raspberry-Pi は、メモリ不足で CPAN更新ができねぇし…