ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Ruby : PHP や Perl が解る人がとにかく Ruby
日時: 2010/01/24 00:55
名前: lightbox



  前提条件
拡張子:
実行環境 : さくらインターネット
キャラクタセット : UTF-8
テキスト改行コード : LF
拡張子:
#!/usr/local/bin/ruby
print "Content-Type: text/html; Charset=utf-8\n\n";

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

# ENV.inspect は、p ENV で出力される結果と一致しています
print ENV.inspect
print "\n";
print '\n';	# 想像通り、' の中では \ は \ という文字列です
print "\n";	# これは改行コードです
p ENV

# nil(NULL) という概念が存在します
a = nil
print "|"
print a		# nil と表示されます
print "|"
print a.to_s	# 変数が空(nil)の場合、空文字に変換されます
print "|\n"

# ヒアドキュメント
/src="(.+?)">.+?src="(.+?)"/m =~ <<LABEL
<script type="text/javascript" src="/js/tc.js"></script>
<script type="text/javascript" src="/js/tc/cookie.js"></script>
<script type="text/javascript" src="/js/tc/focus.js"></script>
LABEL

js_01 = ($1).to_s

# ヒアドキュメントや文字列内の値のパースです。
# 式も書けます
print <<LABEL
<PRE>
#{js_01}
#{($2).to_s}
#{js_01 + ','+ ($2).to_s}
</PRE>
LABEL

print "#{js_01 + ','+ ($2).to_s}"

=begin

範囲指定のコメント

=end
Ruby が出力する実行中のエラーメッセージは標準エラー出力に出力されるので デフォルトではエラーが出てもどの行で何が起こったか全く解りません。 PHP でも設定でエラーメッセージを出無いようにはできますが、通常、複雑なWEB アプリを作成することを前提としているので、デフォルトではエラーメッセージが 出力されるようになっているはずです。 また、PHP は実行環境の設定は、php.ini を変更するか、設定用の関数を実行する 事になっています。ですが、Ruby はその関係の情報が特別に整理されていない上に、 元々あまり考慮されていないようです。 Ruby は名前からしても、Perl に近い書式が多く見受けられます。これは、PHP から 入ったプログラマにはとても解りにくい結果を招きます。Perl でコードを書いてた プログラマが想像の付く事柄も、PHP で慣れてしまっているとファイルのパーミッシ ョンでさえ設定するのを忘れる程です ヒアドキュメントは PHP にもありますが、Perl ではそれしか無かった為に WEB アプリケーションにおける表現の最前線の場を PHP に完全に奪われてしまいました。 もちろんセッションが無かった事も大きかったですが、そういう意味で言うと Ruby は中途半端な構成だと感じます。今の時代で、アプリケーション開発を目的とした 場合、Perl と比べるのは特別な事情を除けばナンセンスですし、PHP とは全く 違ったものである以上、用途ははっきり分化されると思います ただ、Perl が難解で複雑な印象であるのに対して、Ruby は容易に目的を達成できる という印象があります。それは、後発の強みかどうかは解りませんが、Mechanize  を使った WEB ページへの直接アクセスは今の時代に非常にマッチした手段を提供して くれている気がします
メンテナンス

Ruby : てっとりばやい、land.to でテスト : .htaccess と p 組み込み関数 ( No.1 )
日時: 2010/01/29 20:38
名前: lightbox


日時: 2010/01/29 20:38
名前: lightbox
  .htaccess
拡張子:
AddHandler cgi-script .rb
  ruby_01.rb
拡張子:
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

print <<LABEL
<style type="text/css">
* {
	margin: 0;
}
</style>
LABEL

p ENV
land.to は運営会社が変わってから、ページ上部がヘッダー広告 になって見栄えが良くなったので、使いやすいと思います。 http://lightbox.if.land.to/ruby/ruby_01.rb とにかく、ヒアドキュメントでそれなりの表示を確保しておいて、 p ENV これは、PHP で言うところの print_r( $_SERVER ) みたいなものですね。 この結果が文字列で欲しい場合は、 変数 = ENV.inspect です。   ruby_01.php
拡張子:
<style type="text/css">
* {
	margin: 0;
}
</style>
<?
print_r($_SERVER);
?>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
Ruby の require について ( No.2 )
日時: 2010/01/24 02:16
名前: lightbox
	>Ruby ライブラリ をロードします
	要するに、ファイルを読み込んで Ruby として実行します
	( ※ 読み込むファイルのパーミッションが実行可能である必要はありません )
	
	>拡張子補完を行い、同じファイルの複数回ロードはしません
	これに関しては、以下の記述が参考になります


拡張子:
[require と load の違いについて]

require は同じファイルは一度だけしかロードしませんが、 
load は無条件にロードします。また、require は拡張子 
.rb や .so を自動的に補完しますが、load は行いません。
require はライブラリのロード、load は設定ファイルの
読み込みなどに使うのが典型的な用途です。
   パスに関しては以下のようにありますが、実際に検証したほうがいいと思います
拡張子:
相対パスのときは組み込み変数 $: に示されるパスを順番に探し、
最初に見付かったファイルをロードします。このとき、$: の
要素文字列の先頭文字が `~' (チルダ) だと、環境変数 HOME 
の値に展開されます
   $: は配列です。
拡張子:
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

load "ruby_view_head.rb"

p $:

print "<br>"
print ($:).length

print "<br>"
print $:[0]
   ruby_02.rb
拡張子:
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# 標準エラー出力の出力先を標準出力に変更
$stderr = $stdout

load "ruby_view_head.rb"

if (ENV['REQUEST_METHOD']).downcase == 'get'
	print "初期画面です<br>"
else
	print "入力がありました<br>"
end
   if 文の then は書かなくても良いようです    ruby_view_head.rb
拡張子:
print <<LABEL
<HTML>

<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis" />

<style type="text/css">
* {
	margin: 0;
}
</style>
</HEAD>
<BODY>
LABEL
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
ちょっとした事 : 縦棒(|)と偽の仕様と演算式の継続行と gsub ( No.3 )
日時: 2010/01/30 02:36
名前: lightbox
縦棒は、ドキュメントで以下のように表現されている場所があります

拡張子:
 | と | の間にはさまれた変数(ブロックの引数)
http://doc.okkez.net/static/192/doc/spec=2fcall.html#yield で、そうなると「ブロック」が重要になりますが、同じページに以下の記述があります
拡張子:
例: 

[1,2,3].each do |i| print i*2, "\n" end
[1,2,3].each {|i| print i*2, "\n" }

文法: 

method(arg1, arg2, ...)  do [`|' 式 ... `|'] 式 ... end
method(arg1, arg2, ...) `{' [`|' 式 ... `|'] 式 ... `}'
method(arg1, arg2, ..., `&' proc_object)
http://doc.okkez.net/static/192/doc/spec=2fcall.html#block ▼関連する一般リンク http://www.oreilly.co.jp/community/blog/2009/05/changes-on-ruby-1-9.html ドキュメントの if の説明の一部としてあります
拡張子:
Ruby では false または nil だけが偽で、それ以外は 0 や空文字列も含め全て真です。 
http://doc.okkez.net/static/187/doc/spec=2fcontrol.html#if 改行についてですが・・・
拡張子:
改行は行が明らかに次の行に継続する時だけ、空白文字として、それ以外では文の区切りとして解釈されます。 
http://doc.okkez.net/static/187/doc/spec=2flexical.html 例えば演算式で、演算子で終わる行は継続するのですが、値で終わる演算式は継続しませんでした
拡張子:
式と式の間はセミコロン(;)または改行で区切ります。
ただし、バックスラッシュに続く改行は文の区切りにならず、次の行へ継続します。
http://doc.okkez.net/static/187/doc/spec=2fprogram.html ▲上記ページの例文は例になっておらず、以下を参照です
拡張子:
    puts(3 \
    + 4) #=> 7
http://doc.okkez.net/static/187/doc/symref.html#backslash gsub は、正規表現一括置換用メソッドです。以下参照 instance method String#gsub Ruby : メソッド定義で URLエンコード
このアーティクルの参照用URLをクリップボードにコピー メンテナンス