perl-一文字ずつ処理をする

[新着] Webテンプレートを仮オープンしました



0   名前: 雑魚PERLER : 2006/08/16(水) 11:53  ID:qQV5J.EO
perlでプログラムを組んでいるのですが、
変数の文字($text="あいうえおabc";)、一文字ずつに処理をしたいのですが、(ループ系の文で)
どうしたら良いのでしょうか。splitで分断してみたりもしましたが、半角と全角でビッドが違うためにうまくいきませんでした。


1   名前: 雑魚PERLER : 2006/08/16(水) 11:53  ID:qQV5J.EO
perlといってもCGIですので、此処に書き込みました。

2   名前: sevi- : 2006/08/16(水) 11:53  ID:PQukhZTw
・ordメソッドで先頭バイトのコード番号を調べる.
・127を超える番号=2バイト文字、
・そうでなかったら1バイト文字とし、
・後はそのバイト数文字をsubstrで取り出し次を調べる.
・以上を文字列の最後のバイトまで繰り返す.

単純に書くと以下のようになると思われる.

sevi-

#!/usr/local/bin/perl

$s = 'あaああbcかかか';
$i=0;
$c;
$len_c;
while($i<length($s))
{
	$len_c = (ord(substr($s, $i, 1)) > 127)? 2 : 1;
	$c = substr($s, $i, $len_c);
	$i += $len_c;
	print $c . "\n";
}
 exit(0);

3   名前: 雑魚PERLER : 2006/08/16(水) 11:53  ID:5v4QS50r
せっかく教えてもらったのにですみませんが、
貼ってもらったスクリプトを実行してみてたのですが、エラーになってしまいました。
perlのパスも合わせたし、バーミッションは705にし、転送モードも合っていると思うのですが、
エラーになってしまいます。文法チェッカーをしてみても、文法異常はないようです。
何故でしょう…

4   名前: Chip : 2006/08/16(水) 11:53  ID:iXTrKUp6
エラーになったのは perlのスクリプト例であってCGIではないから。
「httpヘッダ」を出力するようにすればCGIとしても実行できるでしょう。

どこかのサーバを使ってテストしているのでしたら非効率だし危険もあるので自PCに
Apache / AnHTTPd + Perl
Perl + Copal
等をインストールし、自前で動作確認できる環境を揃えておく事を強くおすすめします。例に挙げたソフトの入手方法などは検索して調べてください。

5   名前: sevi- : 2006/08/16(水) 11:53  ID:PQukhZTw
エラーの原因は通常エラーメッセージとしてエラー発生時になんらかの形で
表示されている筈なのでそれを読むように.

また、
WEB上で確認するより、ActivePerl等を導入し、コマンドプロンプト上で
確認する方が早いと思われる.

尚、一応提出したコードは動作確認済みであり、結果出力は


a


b
c




と、変数$sの内容が一文字ずつ後ろに改行をつけて出力される.

とりあえずエラーについてはまずエラーメッセージをみるようにとしか言えない.
申し訳ない.

sevi-

一覧へ戻る