或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。最近はスロット放浪記やってます。。

Perl,Python,Rubyのインタラクティブシェル-PerlとPython学び易さ比較2

PerlとPython学び易さ比較。 - oneshotlife_tomの日記
Pythonは学びやすい言語だと思うし、学びやすい言語となるように設計されているので、事実学びやすい言語だ。(トートロジー・・・)

簡単に動かせるということは重要だ。インタラクティブシェルがあれば、簡単に動かせる。Pythonインタラクティブシェルが標準で付いているので、Pythonは学びやすいんだと言っても、PerlにもRubyにもあるじゃねぇか!と反論されてしまうのがおち。実際、Perlにもあるし、Rubyにもある。実際に動かしてみる。

結論を先に言うと、Perlの場合は標準でインタラクティブシェルが入っているわけではないので、環境の構築が必要。PythonRubyは標準でインタラクティブシェルが入っているので、機能差や、使い勝手は別として、同様に簡単に実行出来る。Perlは、これに限らずなんだけど、CPANのモジュールをインストールする必要があることが多く、依存関係があると(他のCPANモジュールを使っていたり)、コンパイル時や実行時にエラーが出てしまうことが多々ある。自力で依存関係とか解決出来る人じゃないとPerlはお勧め出来ない。

Ruby on RailsのクリエイターのDHHが言っていたけど、標準で入っていることは重要なんですよ!特にこういう、ツール類とかは標準で入っていたほうがいいに決まってる。どうせ使うんだから。

Perl

$re.pl
Failed to load role: Devel::REPL::Plugin::CompletionDriver::INC Can't locate File/Next.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/local/share/perl/5.14.2/Devel/REPL/Plugin/CompletionDriver/INC.pm line 3.
BEGIN failed--compilation aborted at /usr/local/share/perl/5.14.2/Devel/REPL/Plugin/CompletionDriver/INC.pm line 3.
Compilation failed in require at /usr/local/share/perl/5.14.2/Devel/REPL/Script.pm line 40.
 at /usr/local/share/perl/5.14.2/MooseX/Object/Pluggable.pm line 235.
	MooseX::Object::Pluggable::_load_and_apply_role('Moose::Meta::Class::__ANON__::SERIAL::6=HASH(0x997229c)', 'Devel::REPL::Plugin::CompletionDriver::INC') called at /usr/local/share/perl/5.14.2/MooseX/Object/Pluggable.pm line 170
	MooseX::Object::Pluggable::load_plugins('Moose::Meta::Class::__ANON__::SERIAL::6=HASH(0x997229c)', 'CompletionDriver::INC') called at /usr/local/share/perl/5.14.2/MooseX/Object/Pluggable.pm line 181
	MooseX::Object::Pluggable::load_plugin('Moose::Meta::Class::__ANON__::SERIAL::6=HASH(0x997229c)', 'CompletionDriver::INC') called at /usr/local/share/perl/5.14.2/Devel/REPL/Profile/Default.pm line 26
	Devel::REPL::Profile::Default::apply_profile('Devel::REPL::Profile::Default=HASH(0x996eee8)', 'Moose::Meta::Class::__ANON__::SERIAL::6=HASH(0x997229c)') called at /usr/local/share/perl/5.14.2/Devel/REPL/Script.pm line 40
	Devel::REPL::Script::load_profile('Devel::REPL::Script=HASH(0x996f474)', 'Default') called at /usr/local/share/perl/5.14.2/Devel/REPL/Script.pm line 30
	Devel::REPL::Script::BUILD('Devel::REPL::Script=HASH(0x996f474)', 'HASH(0x9652bb8)') called at /usr/local/lib/perl/5.14.2/Class/MOP/Method.pm line 125
	Class::MOP::Method::execute('Moose::Meta::Method=HASH(0x97827bc)', 'Devel::REPL::Script=HASH(0x996f474)', 'HASH(0x9652bb8)') called at /usr/local/lib/perl/5.14.2/Moose/Object.pm line 59
	Moose::Object::BUILDALL('Devel::REPL::Script=HASH(0x996f474)', 'HASH(0x9652bb8)') called at /usr/local/lib/perl/5.14.2/Moose/Meta/Class.pm line 278
	Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x9582c98)', 'HASH(0x9652bb8)') called at /usr/local/lib/perl/5.14.2/Moose/Object.pm line 28
	Moose::Object::new('Devel::REPL::Script', 'ARGV', 'ARRAY(0x9949bbc)', 'extra_argv', 'ARRAY(0x965c2b8)', 'usage', 'Getopt::Long::Descriptive::Usage=HASH(0x98c225c)') called at /usr/local/share/perl/5.14.2/MooseX/Getopt/Basic.pm line 105
	MooseX::Getopt::Basic::new_with_options('Devel::REPL::Script') called at /usr/local/share/perl/5.14.2/Devel/REPL/Script.pm line 88
	Devel::REPL::Script::import('Devel::REPL::Script', 'run') called at /usr/local/bin/re.pl line 3
	main::BEGIN() called at /usr/local/bin/re.pl line 3
	eval {...} called at /usr/local/bin/re.pl line 3
BEGIN failed--compilation aborted at /usr/local/bin/re.pl line 3.

面倒だから、エラー追求はやめた。

Python

$python
Python 2.7.3 (default, Sep 26 2012, 21:53:58) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> v=10
>>> v
10
>>> type(v)
<type 'int'>

簡単っすね。

Ruby

$irb
irb(main):001:0> v=10
=> 10
irb(main):002:0> v
=> 10
irb(main):003:0> v.class
=> Fixnum
irb(main):004:0> 

こっちも簡単。