by
ginriki | 9 月 28th, 2008
前回の記事の続き。
今回はperl。
探してみると、やっぱり対話型インターフェイスを作ってる方がいますね。
メソッド名などの補完も行ってくれるものとして、perlshがありました。
perlshは、Term::ReadLine::Gnuライブラリに付属してます。
Term::ReadLine::Gnuのインストールには、cpanを使うと便利です。
普通にyum install perlとかしとけば、cpanコマンドも付いてくるっぽい。
ただ、私のCentOS 5.1だと、cpan経由のライブラリダウンロードURL (urllist)の
設定がされてなかったので、下記リンク先を参考にしてurllistを設定しました。
http://www.drk7.jp/MT/archives/000885.html
そして、Term::ReadLine::Gnuライブラリをインストールするわけなんですが、
事前にreadlineライブラリ等をyumなどを使ってインストールしとかないと、うまくインストールできないらしいです。
私の環境では、すでにインストール済みだったので、特に問題ありませんでした。
Term::ReadLine::Gnuライブラリのインストールからperlshを使うまでの流れは以下、
$ cpan install Term::ReadLine::Gnu
$ perl ~/.cpan/build/Term-ReadLine-Gnu-1.17/eg/perlsh
main[1]$ use utf8
main[2]$ utf8:: [TAB]
utf8:: downgrade is_utf8 unimport
AUTOLOAD encode native_to_unicode upgrade
decode import unicode_to_native valid
main[2]$ exit #終了
perlshファイルは、実行パスの通ってるディレクトリに入れておくと起動が楽です。
by
ginriki | 9 月 25th, 2008
昨日の記事の続き
このまま、各言語のインタラクティブモードの補完機能について書いてけば、
しばらくネタに困らないので続けよう。
今回はPythonです。
pythonの場合、引数なしで起動すればインタラクティブモードになりますが、
下記のようにrlcompleterをimportすることで、補完機能が使えます。
ただし、readlineライブラリが必要です。Linuxとかなら、yum install pythonで普通に入るようです。
PYTHON:
-
$ python
-
>>> import rlcompleter
-
>>> rlcompleter.readline.parse_and_bind('tab: complete')
-
>>> di [TAB]
-
dict dir divmod
-
>>> di
Windowsの人は、Python Alternative Readlineをインストールするのが楽だと思います。
若干、通常のreadlineと挙動が違うのがアレですが・・・。
参考サイト
by
ginriki | 9 月 24th, 2008
この前の記事の続き。
rubyには、irbっていうinteractive modeあります。
irb実行中に、 require 'irb/completion' すると、TABでメソッド名等の補完ができるようになって大変便利です。
PHPのinteractive modeでも同じことができないかなと思い、
探してみたところ、PHP5.1 から標準で導入されてることがわかりました。
ただし、--with-readline付きでPHPをコンパイルした場合に限ります。
yumでインストールしたPHPは、--with-readlineが付いてないので、
PHP-cliだけソースコードからもう一度コンパイルしてみました。
環境は、CentOS 5.1です。
$ wget http://jp2.php.net/get/php-5.2.6.tar.gz/from/jp.php.net/mirror
$ tar xzvf php-5.2.6.tar.gz
$ cd php-5.2.6/
$ yum install libxml2-devel
$ yum install readline-devel
$ ./configure --prefix=~/local --disable-cgi --with-readline
$ make
$ make install
$ ~/local/bin/php -a
Interactive shell
php > get_class [TAB]
get_class get_class_methods get_class_vars
php > get_class
うむ、便利だ。
by
ginriki | 9 月 8th, 2008
ブログに書くネタは結構あるんだけど、整理してから書こうとするとなかなか書けない・・・。
しょうがないんで、ネタは小出しに書くことにしよう。
PHPで何かのライブラリのオブジェクトを使う際、どんなメソッドがあるのかよくわからにことが多々あります。リファレンスを見りゃいいんですが、それが面倒な時は、PHP (CLI)のインタラクティブモードを使うと便利です。
インタラクティブモードの場合、statementが完成するたびに(セミコロンで区切られるたびに)処理が実行されるようです。
PHP:
-
$ php -a
-
-
<?php
-
-
-
-
(
-
[0] => close
-
[1] => getAttribute
-
...
-
[24] => expand
-
)
-
(Windowsだと Ctrl-Zで終了)
-
-
$
インタラクティブモードで、よく利用する関数は以下 (全部、リフレクション系関数)、
- get_class_methods( mixed $class_name ) [クラスのメソッドを配列として返す]
- get_object_vars ( object $object ) [オブジェクトのプロパティを配列として返す]
- get_declared_classes(void) [定義済のクラスの名前を配列として返す]
- get_defined_functions(void) [定義済の関数の名前を配列として返す]
- get_defined_vars(void) [定義済の変数の名前を配列として返す]
- get_loaded_extensions(void) [コンパイル/ロードされている全てのモジュールの名前を配列として返す]
- get_extension_funcs ( string $module_name ) [あるモジュールの関数名を配列として返す]