Archive for 1月, 2006

[Perl] XML-SimpleによるXML生成

土曜日, 1月 21st, 2006

XML::Simpleの入手

CPANから入手できる。
http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm

XMLの読み込みのサンプルコード

XMLin関数を使って、XMLをハッシュリファレンスに落とし込むことが出来る。

use strict;
use XML::Simple;
use Data::Dumper;
{
    package Data::Dumper;
    # Data::Dumper がUTF-8をエスケープしないためのHack
    sub qquote { return shift; }
}
$Data::Dumper::Useperl = 1;


binmode STDOUT, 'utf8';


my $xml = '<?xml version="1.0" encoding="UTF-8" ?>
<root>
<Prefecture>Tokyo</Prefecture>
<Person age="30">Taro Yamada</Person>
</root>';

# XMLをハッシュに変換する。
$ref = XMLin($xml, ForeArray => 1);

print Dumper $ref;
$ perl xmlin.pl
$VAR1 = {
          'Prefecture' => [
                            'Tokyo'
                          ],
          'Person' => [
                        {
                          'content' => 'Taro Yamada',
                          'age' => 30
                        }
                      ]
        };

XMLの生成 サンプルコード

XMLout関数を使って、XMLを出力することが出来る。

use strict;
use XML::Simple;
use Encode 'encode';
use utf8;
binmode STDOUT, 'utf8';

my $VAR1 = {
          'Prefecture' => [
                            'Tokyo'
                          ],
          'Person' => [
                        {
                          'content' => 'Taro Yamada',
                          'age' => 30
                        }
                      ]
        };

print XMLout($VAR1, RootName => 'root');
$ perl xml.pl
<root>
<Person age="30">Taro Yamada</Person>
<Prefecture>Tokyo</Prefecture>
</root>
</pre>

構築環境

XML::Simple 2.14, Perl 5.10.1

参考文献

初めてのPerl 第5版 続・初めてのPerl 改訂版 入門XML

[vim] 自動補完

土曜日, 1月 21st, 2006

辞書ファイルによる補完

辞書ファイルの設定をしておくと、辞書から候補を取り出してくれる。
辞書ファイルを設定しなくても、編集中のファイルから候補を取り出してくれる。
~/.vimrcでset dictionaryで辞書ファイルを設定する。

 autocmd FileType perl :set dictionary=/usr/share/vim/vim61/syntax/perl.vim
 autocmd FileType c :set dictionary=/usr/share/vim/vim61/syntax/c.vim

補完機能の操作方法。

割当キー 動作
Ctrl-X Ctrl-K 辞書補完モードに入る
Ctrl-N 次候補
Ctrl-P 前候補

[vim] 自動インデント 自動整頓

土曜日, 1月 21st, 2006

インデントを自動でやりなおしてくれる。インデントがぐちゃぐちゃになったときに使う。
先頭へ移動し、

=G

「:」は不要。
一部だけ、インデントしたい場合は、「Ctrl-V」で矩形選択してから、「=G」。

[vim] 画面分割

土曜日, 1月 21st, 2006
:vs

で水平に分割

:sp

で垂直に分割

Ctrl-W Ctrl-W

で移動

:only

で1画面に戻る。

[[【vi】複数ファイルの同時編集]]と組み合わせて使うと便利。

[vim] 置換 確認

土曜日, 1月 21st, 2006

置換するときに、置換するかどうか確認を出しながら置換するコマンド。
最後に、「gc」をつける。

#aaaをbbbに置き換える
:%s/aaa/bbb/gc

大文字/小文字を区別しないようにするには

:set ignorecase

とする。メンドクセ。

[Linux] ユーザの追加と削除 adduser/deluser コマンド

土曜日, 1月 21st, 2006

ユーザの追加

  1. 一般ユーザ
    # /usr/sbin/adduser -g グループ -d ホームディレクトリ -s /bin/bash ユーザ名
    # passwd ユーザ名
    # <パスワードを入力>
  2. SSHでログインできないユーザの作成(メール専用等)
    シェルを /sbin/nologin に設定するとログインできないユーザを作ることができる。

    # /usr/sbin/adduser -g グループ -d ホームディレクトリ -s /sbin/nologin ユーザ名
  3. 設定の確認。
    # finger ユーザ名
    # groups ユーザ名

ユーザーの削除

「-r」をつけるとホームディレクトリも含めて削除できる。

#userdel -r ユーザ名

参考文献

【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
Linuxコマンド
ポケットリファレンス
¥ 2,394
サーバ管理技術入門 (ネットワーキング入門シリーズ)
サーバ管理技術入門
¥ 2,940
UNIXシェルスクリプトハンドブック (Technical handbook series (001))
UNIXシェルスクリプト
ハンドブック

[vim] BackSpaceキーの動作を変更する

土曜日, 1月 21st, 2006

そもそも、環境によっては、Backspaceで文字が消せない場合がある。
BackspaceにCtrl+Hが割当られてないことが原因なので、~/.vimrcに以下の内容を設定する。

noremap ^? ^H
noremap! ^? ^H
noremap ^H
noremap! ^H

BackSpaceキーで、Windowsの一般的なエディタと同様に、改行を削除できるようにするには、

:set backspace=2

とする。
これで、Backspaceで改行を削除できるようになる。

[vim] 複数行の一括インデント

土曜日, 1月 21st, 2006
Ctrl + V

で矩形洗濯を行ったあと、

>>

でインデント。

shiftwidthを指定することで、インデント幅を指定できる。

:set shiftwidth=4

[Perl] Term-ProgressBarによるプログレスバー表示

土曜日, 1月 21st, 2006

プログレスバー

Term-ProgressBarモジュールを使うと、テキストベースのプログレスバーを表示する。

表示例:

$ perl bar.pl
20% [============= ]

Term-ProgressBar サンプルコード

コンストラクタには最大値を渡す。
updateメソッドの引数に指定した値に応じたプログレスバーが表示される。

 use strict;
 use Term::ProgressBar;
 use constant MAX => 10;
 
 my $prog = Term::ProgressBar->new(MAX);
 
 for (0..MAX) {
   sleep 1;
   $prog->update($_);
 }

Term-ProgressBar の入手

以下のURLからダウンロード可能。
http://search.cpan.org/dist/Term-ProgressBar/lib/Term/ProgressBar.pm

参考文献

初めてのPerl 第5版 続・初めてのPerl 改訂版 入門Perl・Tk―Perlで簡単GUIプログラミング

[Perl] Net-SSH-PerlによるSSH

土曜日, 1月 21st, 2006

Net::SSH::Perlモジュールを使って、PerlからSSHを叩く。

たくさんのサーバに対して、同様の操作をしたい場面は多い。
コマンドを発行するだけならシェルスクリプトでも良いが、Perlの豊富なモジュールと連携できるのが嬉しい。

Net::SSH::Perl の入手

ここ(CPAN)からダウンロードできる。
http://search.cpan.org/~dbrobins/Net-SSH-Perl-1.28/lib/Net/SSH/Perl.pm

サンプルコード

パスワード認証を使って複数のサーバにログインして、dfコマンドを実行する。

 use strict;
 use Net::SSH::Perl;
 use IO::Handle;
 
 my @host = ("host1", "host2");
 
 foreach my $ahost (@host) {
     ssh_df($ahost);
 }
 
 sub ssh_df($) {
     my $host = shift;
     my $ssh = Net::SSH::Perl->new($host);
     $ssh->login("USER", "PASS");
     print $ssh->cmd("df");
     $ssh->cmd("exit");
 }

参考文献

初めてのPerl 第5版 実用SSH 第2版―セキュアシェル徹底活用ガイド 入門OpenSSH―Linux/FreeBSD/Solaris/Mac OS X対応