標準入力からの読み込み

標準入力からの読み込みには、「<STDIN>」を使います。下記の例では、標準入力から1行読み、変数 $x に代入してから、その値をprintするプログラムを作成しています。実際に実行しているところでは、read_stdio.pl をコマンドとして実行してから、「123」をキーボードから入力すると、その入力した文字列「123」が画面に出力されます。

$ cat read_stdio.pl 
#!/usr/bin/perl
$x = <STDIN>;         # 標準入力から1行読み、変数 $x に代入
print $x;        # $x をプリント

$ chmod 755 read_stdio.pl 
$ ./read_stdio.pl 
123
123

こんにちは perl

日本語を使うプログラムでは、使用している文字コードについて意識が必要です。iconvなどで変換しましょう。下記の例では、Shift_JISのhello_ja_SJIS.plからUTF-8のhello_ja_UTF8.plへ変換しています。最初は表示のために実行しているコマンドで、次に、表示された結果を hello_ja_UTF8.plへリダイレクトしています。最後に、hello_ja_UTF8.pl を実行しています。

$ iconv -f Shift_JIS -t UTF-8 hello_ja_SJIS.pl
#!/usr/bin/perl
print "こんにちは Perl\n"

$ iconv -f Shift_JIS -t UTF-8 hello_ja_SJIS.pl > hello_ja_UTF8.pl
$ chmod 755 hello_ja_UTF8.pl
$ ./hello_ja_UTF8.pl
こんにちは Perl

perl hello.pl

which コマンドで、どこにファイルがあるか確認をしておきます。次に、hello.plを作成します。perlコマンドの場所により、先頭行の内容は変えます。実行するには、perlコマンドでファイルを指定します。hello.plをchmodで実行可能とすれば、そのままファイルを実行することができます。

$ which perl
/usr/bin/perl

$ cat hello.pl 
#!/usr/bin/perl
print "Hello, Perl\n"

$ perl hello.pl 
Hello, Perl

$ chmod 755 hello.pl 
$ ./hello.pl 
Hello, Perl

PHP 文字

PHP6開発 UTF-16化を断念、5.3へロールバック | エンタープライズ | マイコミジャーナルということらしいです。

Caucho Resin : Reliable, Open-Source Application Serverとか使えば、多言語対応はそれほど難しくないような気がするのですが、そう簡単にはいかないのでしょうか。個人的に mb_xxx とかで関数対応するというのは、トータル的にコスト増につながると思うので、言語レベルで対応することは必須のような気がしますが。ただ、文字コードの問題は一筋縄ではいかないので、優秀な開発者がいないと解決は難しいのだというのは理解できます。

TSVへの変換

空白区切りになっているテキストデータ log1.txt をタブ区切り(TSV)へ変換するには、いろいろな方法がありますが、AWKだとこんな感じではないかと。1つ目のデータと、2つ目のデータを入れ替えるということもしています。

$ cat log1.txt | awk ‘{printf("%s\t%s\n", $2, $1);}’ 

JavaでJavaScript

JavaScriptをJavaで実行するプログラムは簡単に作れるので、ちょっと用意してみた。Java6ではRhinoが同梱されていますが、その挙動を確認するのに便利です。直接書き込む方法と、a.jsというファイルを用意して読み込む方法と、両方用意してみました。

import javax.script.*;
import java.io.*;

public class Script {
 public static void main(String[] args) throws Exception {
  Script app = new Script();
  app.run1();
  app.run2();
 }
 public void run1() throws Exception {
  ScriptEngineManager m = new ScriptEngineManager();
  ScriptEngine engine = m.getEngineByName("JavaScript");
  try {
    engine.eval("print(‘Hello, world!’)");
  } catch (ScriptException e) {
    e.printStackTrace();
  }
 }
 public void run2() throws Exception {
  ScriptEngineManager m = new ScriptEngineManager();
  ScriptEngine engine = m.getEngineByName("ECMAScript");
  InputStream is =
      this.getClass().getResourceAsStream("a.js");
  try {
    Reader reader = new InputStreamReader(is);
    engine.eval(reader);
  } catch (ScriptException e) {
    e.printStackTrace();
  }
 }
}

ちなみに、a.js の内容は次のような感じの内容。

print("\nhello\n");
var itemTitle = "&abc&def&";
re1 = new RegExp("&", "g");
itemTitle = itemTitle.replace(re1, "&amp;");
print(itemTitle);