Perlについての質問箱 16箱目

このエントリーをはてなブックマークに追加
608デフォルトの名無しさん:2005/05/14(土) 03:40:08
>>607
それよりも、自分で書いたコードが半年後に読めなくなる頭脳の方を
問題にすべき。
609デフォルトの名無しさん:2005/05/14(土) 03:44:25
>>606
ウソつくな
610デフォルトの名無しさん:2005/05/14(土) 03:44:32
>>607
逆コンパイルできてしまう開発環境よりいいんじゃね?
611デフォルトの名無しさん:2005/05/14(土) 03:46:24
>>607
15年前に書いたコードも普通に読めますが。
612594:2005/05/14(土) 03:57:41
自己解決しました。失敬。
613デフォルトの名無しさん:2005/05/14(土) 06:10:19
>>606
何がいけないのかわからなかったら
正規表現のグループ化について調べると良いと思うよ
614デフォルトの名無しさん:2005/05/14(土) 07:13:42

              _,,−-、 
        _,, .. _,,-‐'": : : : : :゙ヽ
     r‐'´: : : : : : : : : : : : : : : : ` 、
    /: : : : : : : : : : :,、: : : : : : : : : :_:ヽ、
    |_: : : : : : : : : /  \: : : : : : : :ヽ、
    {: : : : : : : : l'      ヽ、: : : : : :{、
    l__: : : : : : :i、       `丶: : t‐`
   /, ヽ: : :/´          |: : : !'
   { ru l': :/  ,/二丶、     }: :,,|
  _`iヽr‐!:丶   'tェッiヽ-'' , '‐-、/:/
  : :丶t': : : ヽ        'xェァノ:/
  : : : : : : : : : : i、        }
  : : : : : ',: : : : ´  i!     _ノ
  : : : : : ヽ :   、_ `゙;;;;> .,r'/
  : : : : : : \  - ,,`''‐--//`丶、.
  : : : : : : : : :`-,; " ̄   /: : : : : :\
  : : : : : : : /       /: : : : : : : : : :',
  : : : : : : :{    ,. -‐ ": : : : : : : : : : : :
 
太宰治先生が>>605を見て人間の醜さを見出したようです。
615デフォルトの名無しさん:2005/05/14(土) 09:30:34
自分で書いたデタラメプログラムがコンパイルできなかったので、
計算機センターのCコンパイラが壊れているとクレームをつけてき
たバカ学生を思い出したぜ。
616デフォルトの名無しさん:2005/05/14(土) 11:46:15
いつの時代だよw
617デフォルトの名無しさん:2005/05/14(土) 13:22:58
今でもいるぞー。
間違ってないんですけどって奴。
618デフォルトの名無しさん:2005/05/14(土) 15:41:15
そっちじゃねーよw
619デフォルトの名無しさん:2005/05/14(土) 15:42:33
>>615
思い出されたぜ。しかも2回やったぞw
10年前だがな〜。
620デフォルトの名無しさん:2005/05/14(土) 15:42:51
open INPUT, "<test.txt" ;
while ( <INPUT> ) {
chomp ;
print "$_\n" ;
}
close INPUT ;
exit ;

このようにすると、ちゃんと一行読み込んでくれるのに、

open INPUT, "<test.txt" ;
<INPUT> ;
chomp ;
print "$_\n" ;
close INPUT ;
exit ;

のようにすると、一行読み込んでくれないのはどうしてなのでしょうか?
<>を使い、代入する変数を省略した場合、デフォルトで、$_ に保存されると
本で読みました。これは while の中だけで有効な話なのですか?
621デフォルトの名無しさん:2005/05/14(土) 15:51:47
http://z77.61-45-86.ppp.wakwak.ne.jp/

っっっうはっwwwおkwwwうぇwww

うぇwww
っうぇwwwwwwwwwwwwうぇwww
うはっwww
っうぇおkwwwおkwwwwwwうはっwww
622596:2005/05/14(土) 15:58:47
日本語PATHについて質問してた者です。あれからネットを調べまわった結果
同じようなケースが1つ見つかりました
内部で勝手にUTF8に変換されてしまうので、shiftjisに文字列をエンコードしなければ成らなかったようです
と言っても理解できてませんけど

use encoding "cp932";
use Encode;
$inputtext = "c:/perl/test/日本語/in.txt";
$inputtext = encode('cp932',$inputtext);
utf8::decode($inputtext);
print $inputtext;
open (IN, '<', $inputtext);
623デフォルトの名無しさん:2005/05/14(土) 16:09:13
2chの板/スレ/投稿一覧を取得するようなモジュールって既にありますかね?
自作してもいいんですが、車輪の再発明もなんなので…。
624デフォルトの名無しさん:2005/05/14(土) 16:24:18
どっかにあったが忘れた
625デフォルトの名無しさん:2005/05/14(土) 16:46:31
while(<>) は for(;<>;) と等価ですか?
これはいくらググっても見つかりません。不安です。
626デフォルトの名無しさん:2005/05/14(土) 16:47:38
>>620
<STDIN>は標準入力から1行読む
全部読んで$_に代入する訳ではない
ただし配列に代入する場合は別
627デフォルトの名無しさん:2005/05/14(土) 16:50:22
ラクダ嫁
628デフォルトの名無しさん:2005/05/14(土) 16:56:17
>>625
whileとforの構文の一般的な話ならperlsyn(1)のFor Loopsという
見出しのところに書いてあるし、行入力演算子を条件のところ
に書いたときの特別な振る舞いを気にしてるならperlop(1)の
I/O Operationsのところに書いてある。
629デフォルトの名無しさん:2005/05/14(土) 17:02:49
>>620
$_に代入してくれるのはwhileとfor(;;)の条件のところに
書いたときだけ。

詳しくは628にもあるがperlop(1)のI/O Operationsのところ
を読んでくれ。

630デフォルトの名無しさん:2005/05/14(土) 17:08:37
>>626-628
レスありがとうございました。
ラクダ本というものの存在をはじめて知りました。
お金ができたら買ってみようとおもいます。
631デフォルトの名無しさん:2005/05/14(土) 17:12:21
失礼 >>629 さんまででした。
本当にありがとうござました!
632デフォルトの名無しさん:2005/05/14(土) 18:16:14
>>622
自分で変換しといて「勝手に」も無いもんだ。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html
633デフォルトの名無しさん:2005/05/15(日) 19:34:29
utf-8でかかれたテキストファイルに対して処理を行うのに、
改行コードが邪魔だったので置換して削除しようとしたのです
が、うまくいきません。改行コードはそのまま残っています。
以下、失敗時の対象コードです。

$hoge =~ s/\x0D\x0A//g; #gいらないかもしれませんが

\r\nもやりましたが結果は同じでした。
テキストエディタで同様の文字コードで置換するとうまくいく
のですが、、、

解決方法よろしくお願いいたします。
634デフォルトの名無しさん:2005/05/15(日) 21:12:00
> Perlメモ
635デフォルトの名無しさん:2005/05/15(日) 23:18:56
お分かりになる方、お願いします。
携帯用のページに perl で post したいんです。

HTMLのフォーム使ってではなく、直接、http://test.com/cgi/post.cgi?id=123&pas=456

・・・という具合に、送信したいんですが、携帯用のページにIEから、上記のようなアドレスを
送信すると、エラーになります。

perl の仕様? が違うのだと思いますが、どのようにすればうまく解決できるのでしょうか。
携帯用だとページが軽いので、可能なら助かります。
636デフォルトの名無しさん:2005/05/15(日) 23:23:44
質問の文章の程度からしてお前には無理。
637デフォルトの名無しさん:2005/05/15(日) 23:45:49
>>635
とりあえず>>1読もうね。
638デフォルトの名無しさん:2005/05/16(月) 00:05:35
http://www.template-toolkit.org/ Version 2.14 Released について
perl の use tmpletes (Template Toolkit)を使いたいんだけど、
使用先がレンタルサーバで、tellnetがつかえないく root 権限もないからインストールができない。
自分の /var/www/cgi-bin/lib/ にアップしたいんだけど、どのディレクトリーをアップすればいいの?
639デフォルトの名無しさん:2005/05/16(月) 00:38:39
この上なく釣りにしか見えんが
lib/Template 以下を lib にぶちこんでみれ
640デフォルトの名無しさん:2005/05/16(月) 20:55:30
perl, rubyとなるとsapphireとかtopazとかありそかもな?
641デフォルトの名無しさん:2005/05/16(月) 22:32:24
>>639

ありがとう。動いたよ。

カキコしてから、CGIじゃんって、気がついたよ。ごめん。
template toolkit って HTML::template より便利だ。
642デフォルトの名無しさん:2005/05/16(月) 23:31:50
質問があります。
相対パス表記である './' や '../' を含んだパスからそれらを出来る限り取り去りたいのですが、
そのような作業をやってくれるモジュールなり、簡単な正規表現の書き方なりあれば教えてください。

↓自力で一応それっぽい正規表現を考えてみましたが、3〜4行も打たねばならず腱鞘炎になりそうです_| ̄|○|||

my $path = 'hogera/../.././././pukya/../hell/o/world';
print "$path\n";

$path !~ m/\.{3,}/ or die;         # 3 以上の '.' の連続をはじく (assert)
$path =~ s|([/\\]\.{1,2})$|$1/|;      # 末尾が '/.' または '/..' ならディレクトリ
$path =~ s|(?<=[/\\])\.[/\\]||g;     # './' の除去
$path =~ s|[^/\\]+[/\\]\.\.[/\\]||g;   # 'hoge/../' の除去

print "$path\n";

あと、このような処理はありがちに思えるので、それっぽい名前とかありそうな気がするんですが、どうなんでしょうか・・・?
643デフォルトの名無しさん:2005/05/17(火) 00:34:43
>>642
つ[ File::Spec ]
644デフォルトの名無しさん:2005/05/17(火) 01:10:55
>>643
$cpath = File::Spec->canonpath( $path ) ;
がそのものずばりですた。
ありがとうございます!
こういう処理は、正準化ちゅうんですね。
645デフォルトの名無しさん:2005/05/18(水) 12:13:20
Windows上で動く簡単なものを作成したのですが
その際に使用するモジュールをppm・installで入れようとしたのですが
入れようとするとno suitable installation taaget found for package と出てきます。
これは何が原因なのでしょうか?
わかる方おられましたらアドバイスいただければと思います。
646デフォルトの名無しさん:2005/05/18(水) 21:02:14
>>645
no suitable installation target found for package

target
になおしてぐぐればでる。
647デフォルトの名無しさん:2005/05/18(水) 21:49:34
らくだ本を見ながらテキスト処理のスクリプトをいくつか書いてるんですが、
GUIのデバッガってないですかね?

同じスクリプトをWindows2000、SuSE Linux9.1、Solaris8の3つで
動かしているので、どのプラットフォームのでもOKです。
648デフォルトの名無しさん:2005/05/18(水) 22:01:44
>>647
perlのdebugオプションつけたんじゃだめ?
emacsでもあったよな。
649デフォルトの名無しさん:2005/05/18(水) 22:02:31
なんだ、GUIか(スマソ
650デフォルトの名無しさん:2005/05/18(水) 22:45:33
perlもdddで扱えたよーなー、と思ってぐぐってみたら、こんなんが出てきた。
ttp://www.att.or.jp/perl/cgi-debug-env/dev-env.html
元ページはえらい古いよーだが、いちおー貼っとく。
あと、今ならEclipseでEPICってのもあるな。
651647:2005/05/19(木) 00:09:13
>>648-650
レスどうもです。
dddをインストールしてみましたが、ちょっと使いにくかったので
Eclipse+EPICの方を試してみようと思います。
652デフォルトの名無しさん:2005/05/19(木) 02:13:39
マルチ+スレ違いの質問をしてしまう私をどうか許してください。
WebProgのPHPくだ質スレにて

print <<"ここから";
$info['name'] = 'taro';
$str = '%db{name}';
$ret = preg_replace("/%db{(.*?)}/", $info[$1], $str);
printf("%s", $ret);
このような感じで「taro」と表示するのを期待しているのですがエラーが出てしまいます。
シングル、ダブルクォーテーションで囲っても期待通りの動作はしませんでした。
どのような方法を使えば「taro」と表示出来ますでしょうか。

それから
foreach (range(1,5) as $key) {
なんとか $i;
print ++$i;
}
print $i;
この結果が「11111」になるよう$iを局所変数にするような関数ってありますか?
ここから

という質問をしたのですが問題のPHPコード同様、期待値を得ることが出来ませんでした。
Perlだったら
$str =~ s/%db{(.*?)}/$info{$1}/;
my $i;
でいけるのですがPHPの場合はどう記述すればいいのでしょうか。
653デフォルトの名無しさん:2005/05/19(木) 02:37:25
>>652
氏ね
654デフォルトの名無しさん:2005/05/19(木) 02:47:55
windowsで、一個上のディレクトリに移動したいときはどうするんでしょう?

chdir ( ..\ );

では、うまくいかないんですが。。。
655デフォルトの名無しさん:2005/05/19(木) 03:46:22
../
656デフォルトの名無しさん:2005/05/19(木) 05:56:35
>>655
ありがとう!
できましたーー
657デフォルトの名無しさん
>>652
正規表現内の{}をエスケープ汁