2012年5月18日金曜日

Perlで特定のリストにあるアイテムが含まれているかを探す

grepを使う

sub search_item_in_list {
  my ($item, $ra_list) = @_;
  if (grep {$item eq $_} @{$ra_list}) {
    return 1;
  } else {
    return 0;
  }
}

Perlで重複要素を省いたリストを作る

下記のような実装が綺麗かも

sub merge_dup {
  my @input_list = @_ == 1 ? @{$_[0]} : @_;
  my @output_list = keys %{{map{$_=>1}@input_list}};
  return wantarray ? @output_list : [@output_list];
}

▼流れ
・@input_listを
配列要素=>1,
の形式のハッシュにする

・それを{}で囲んでハッシュレフに変換する

・さらにそれを%{}で囲んでデリファレンスする

・得られたハッシュのkeyのみを取り出せば重複なしリストの出来上がり

2012年5月12日土曜日

CPANからモジュールを落とす初期設定

http://www.fuji.sakura.ne.jp/~yada/talk2000/perl.shtml

まだうまくいっていないのでとりあえずのメモの段階。


# which lynx
/usr/bin/lynx
# export ftp_proxy=http://proxy.you.com:8000/
# export http_proxy=http://proxy.you.com:8000/
# perl -MCPAN -e shell
で後はyesだのエンターだの後は流れでお願いします。

最終的にdone_testingも使えないTest::Moreをアップグレードしたいのだが、
cpanのupgradeコマンドすら使えない・・

perl -MCPAN -e 'CPAN::Shell->install( CPAN::Shell->r)'
をやっても
Can't access URL ftp://ftp.jaist.ac.jp/pub/lang/CPAN/authors/id/R/RU/RURBAN/Opcodes-0.11.tar.gz.
でこのモジュールのせいで更新もできない・・

Linux(CentOS)にパスを通す方法

http://d.hatena.ne.jp/Akineko/20090825/1251187210

exportコマンドで環境変数をエクスポートする。PATHに関しては
PATH=$PATH:通したいパス
のように$PATHの後に通したいパスを記載するようにしないと
既存のパスが通らなくなってしまうので注意。

例: /usr/local/scala/bin にパスを通す場合
$ export PATH=$PATH:/usr/local/scala/bin

ログアウトしても同様の状態を維持したい(永続化する)場合は下記の方法を使う
・特定ユーザーのみに設定

ホームディレクトリにある.bash_profileの最終行に
export PATH=$PATH:通したいパス
を記載して保存。その後
source .bash_profile
を実行して設定を反映


・全ユーザーに設定
/etc/profileの最終行に

export PATH=$PATH:通したいパス
を記載して保存。その後
source /etc/profile
を実行して設定を反映



▼具体例
http://memopct.blogspot.jp/2012/05/susu.html
で記載した一般ユーザーでifconfigコマンドが使えない問題の解決をする

・まずは/etc/profileの末尾にexport PATH=$PATH:/sbinを書き加えて保存

[root@localhost ~]# vim /etc/profile
-------------------------------------------
 54     fi
 55 done
 56
 57 unset i
 58 unset pathmunge
 59 export PATH=$PATH:/sbin
-------------------------------------------

・まだ上記設定が反映されていないので一般ユーザーのPATHに/sbinはなし
[guest@localhost ~]$ env | grep PATH
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin

・source /etc/profileでファイル設定を再読み込みするとPATHに/sbinが加わっていることがわかる
[guest@localhost ~]$ source /etc/profile
[guest@localhost ~]$ env | grep PATH
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin:/sbin



suとsu - の違い

http://www.obenri.com/_command/su01.html

su の後に "-(ハイフン)" をつけた場合と付けない場合の違いは、 su コマンド実行前のユーザーアカウントの操作環境(使用する シェル の種類や 環境変数 、 ホームディレクトリ など)をそのまま "root" に引き継ぐか、それとも "root" に設定されている操作環境を用いるか、という違いがあります。

具体的には
su
だとホームディレクトリやPATHなどの環境変数が変更前のユーザーの設定のままだが
su -
だとrootのホームディレクトリになり、PATHなどの環境変数もrootのものが設定される。

▼具体例
・CentOSでifconfigコマンドが使えない

[root@localhost ~]# which ifconfig
/sbin/ifconfig

ifconfigとコマンドを打ってもコマンドが通らないのは一般ユーザーは/sbin/にデフォルトで
パスが通っていないため。

[guest@localhost ~]$ env | grep PATH
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin

下記のようにsuでは環境変数が一般ユーザーのものと同一なためifconfigのパスが通っていない


[guest@localhost ~]$ su
パスワード:
[root@localhost guest]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin
[root@localhost guest]# ifconfig
bash: ifconfig: command not found

su -ならrootの環境変数がセットされるため、ifconfigのパスが通っている
[guest@localhost ~]$ su -
パスワード:
[root@localhost ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr **:**:**:**:**:**
          inet addr:192.168.1.*  Bcast:192.168.1.255  Mask:255.255.255.0