ホーム » 「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更新ができねぇし…

Google 検索

My Google   Yahoo

Microsoft

ファンサイト