Perl コーディング初心者質問コーナー Part27

このエントリーをはてなブックマークに追加
495あぼーん
あぼーん
496あぼーん:あぼーん
あぼーん
497あぼーん:あぼーん
あぼーん
498あぼーん:あぼーん
あぼーん
499あぼーん:あぼーん
あぼーん
500あぼーん:あぼーん
あぼーん
501あぼーん:あぼーん
あぼーん
502あぼーん:あぼーん
あぼーん
503nobodyさん:03/08/28 08:53 ID:JP6BwLoY
新しいマシンにRedHat9入れたら、Perl5.8.0が入ってきました。
ところが、5.8からNDBM_Fileがないので、前に作っていたデータベースが
使えない。5.6.1のを持ってきたけど(NDBM_File.pm, NDBM_File.bs,
NDBM_File.so)、エラー出る。requireしてるXLoaderとかの変更があるみたい。
元のマシンでNDBMからSDBMに変換して新マシンにコピーして使うか、
新マシンに5.6.1入れるか、どっちがいいと思う?
いろいろググったが、情報ないんで聞かせてくらはい。

504nobodyさん:03/08/28 09:23 ID:???
いらっしゃーい、Perlの[[[コーディング]]]で困ってる人のスレです。
505nobodyさん:03/08/28 09:25 ID:???
運用はスレ違い
506nobodyさん:03/08/28 09:30 ID:???
>>504, 505
Part26までは、「コーディング」なんて制限はスレタイにもなかった。
これを付けた香具師もwebプログラミングと区別したかったからに
過ぎない。とにかく、もういい。お前らには、聞かない。

507nobodyさん:03/08/28 09:36 ID:???
そりゃよかった。二度と来るなよ。
508nobodyさん:03/08/28 10:14 ID:???
>>503
5.8.0のディストリビューションには入っているようだが…何故入ってないんだ?
Perlのソースを落としてきて、NDBM_Fileだけをビルド・インストールできるんじゃないかな。
データの変換の方が面倒がなくていいかもしれないが。
509nobodyさん:03/08/28 10:35 ID:???
>5.8からNDBM_Fileがない
こう決め付けてるから対処がおかしくなるんだな
ソースから入れたPerl5.8.0にはNDBM_Fileあったけど
たしかにRedHatに最初から入ってるやつには無いね。なんでかしらんけど
510506:03/08/28 10:58 ID:TK42EOIB
良識ある>>508, >>509さん、ありがd。
そですね、Perl5.8.0のソースからNDBM_Fileだけ抜き出して
buildできるかやってみまつ。
低能無恥の>>507さん、お前こそ消えて出てくんな


511nobodyさん:03/08/28 11:21 ID:???
>>510
わからんなあ。
507が「低脳無恥」(これ、無知の間違いじゃない?)だと言う証拠はどこにもないんだが。
507がどれくらいの能力を持っているのか、本当に知っているのか?
これこそ勝手に自分の脳内妄想を垂れ流してるだけじゃないか?
ついでに言えば、508、509を「良識がある」としているが、これまた脳内妄想でしかない。
Part26までがどうだったかは知らないが、現在ではコーディングに限定した話題のスレになっているんだ。
ガイドラインに沿わない質問をした>>506が変であり、かつそれに対して回答を示した508、509もおかしい。
これは、スレの主題をぼやけさせる一因であり、本当に良識があるなら、厳に慎むべき行為だろう。

スレの状況を読まず、自分に都合の悪い回答をした507をこきおろし、
自分に都合のいい回答をした508、509をあがめたてる、ただの自己中に見えるんだが、
そこんところ自分を客観的に見てどう思うかね、>>510よ。
512nobodyさん:03/08/28 11:34 ID:???
>>506
どのスレと勘違いしたの?
このスレはPart7の時から>>1に「コーディング」のためのスレとかかれているけど
http://pc.2ch.net/php/kako/1000/10002/1000267444.html
513506:03/08/28 12:16 ID:TK42EOIB
>>511,512
ご苦労様です。
514nobodyさん:03/08/28 12:23 ID:???
一言余計なんだよ。それがなきゃ静かに終わったかもしれんのに

正規のスレに同じ事かかれたらうざいんでとりあえずここで
話し進めただけだし
515nobodyさん:03/08/28 12:24 ID:???
なんでそんなにこだわるかなあ
そこまでこだわるなら夢イタに行くべきだよ。
516nobodyさん:03/08/28 12:30 ID:???
>>515
CGIの質問をして追い出された人が怒るかもしれないから。
517nobodyさん:03/08/28 12:41 ID:???
>>516
CGI/perlな人がけっこういるわけで、WebProgにあればCGI/perlな人が
寄ってくるのはいたしかたないし、追い出す方がおかしい、と思うけど。

ムイタならここよりCGI/perlな人は少ないわけで、
ここの住人も幸せにコーディング語れるんじゃないの?
518nobodyさん:03/08/28 15:54 ID:???
ちょいと質問です。

perlのCGIプログラムをインストールしようとしているのですが、それがCGI.pmを利用しています。
そのバージョンが指定されていて、/usr/lib/perl5/5.00503/ にあるもののバージョンが
古いです。

ローカルにバージョンの新しいCGI.pmをインストールして、そっちを利用させるようにしたい
のですが、どこをいじればいいのでしょうか?

require './CGI.pm';

をしてみましたが、結局別のプログラムなどが読んでいるところでエラーになります。

use ./CGI; なども当然ダメです。

よろしくお願いします。
519nobodyさん:03/08/28 16:14 ID:???
>>518
そのCGIプログラムと同じデレクトリにCGI.pmを置いても?
520nobodyさん:03/08/28 16:16 ID:???
>>519
ダメですねぇ。
できるはずなんですか?requireでなくてできるはずなら、色々調べてみます。
521nobodyさん:03/08/28 16:21 ID:???
>>520
/home/hoge/perl-lib とかにCGI.pm置いて

use lib '/home/hoge/perl-lib';
use CGI

するとかして使ってるけど。;
522nobodyさん:03/08/28 16:27 ID:???
ローカルに、じゃなくてユーザーデレクトリに、だよね。
ローカルに置いたモジュールをサーバから使わせようとしてるわけじゃないよね。
523nobodyさん:03/08/28 16:58 ID:???
>>522
そうです。ユーザディレクトリにです。
>>521
まだ試していませんが、これで解決できそうです。
ありがとうございました。
524nobodyさん:03/08/28 17:02 ID:???
Perlでファイルハンドルを変数に入れて、メソッドに渡すことがしたいのですが、
どうやればいいのでしょうか?

open($FILE,"ABC.def");
test($FILE);
close($FILE);

sub test {
 my $FILE = @_;
 my $line = <$FILE>; #一行読み込む
 printf("%s\n",$line); #何も表示されない(undef)
}

こんな感じでやりたいのですが...
525nobodyさん:03/08/28 17:11 ID:???
open(FILE,"ABC.def");
$file = FILE;

じゃあかんの?
526nobodyさん:03/08/28 17:17 ID:???
>>525
駄目でした。。。
527nobodyさん:03/08/28 17:21 ID:???
むしろ、IO::File推奨。
528nobodyさん:03/08/28 17:35 ID:???
FileHandle.pmを使ってみたのですが、
何故か
$in = new FileHandle("ぼくのにっきちょう.nick","r");
$line = <$in>;
printf("%s\n",$line);
は出来ても、この$inを
bob($in);
sub bob {
 my $in = @_;
 my $line = <$in>;
 printf("%s\n",$line);
}
とやったら駄目みたいです
($inの中の値はどちらも同じだった(アドレスも))
529nobodyさん:03/08/28 17:39 ID:???
っとおもったらなんかできちゃいましたみなさんどうもありがとうございました!
530nobodyさん:03/08/28 17:57 ID:???
>>506
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
531nobodyさん:03/08/28 18:05 ID:???
ファイルハンドルを変数に入れる場合は型グロブを使う

open(FILE,"ABC.def");
$file = *FILE;
test($file);
close(FILE);

sub test {
my $file = @_[0];
my $line = <$file>;
print $line;
}
532nobodyさん:03/08/28 18:14 ID:???
>>531
ウホッ!本当だ
サンクス!!!
533nobodyさん:03/08/28 19:50 ID:???
>>518
use FindBin;
use lib $FindBin::Bin;
use my_CGI; # 標準ライブラリをリンクしないようにリネーム(CGI.pm -> my_CGI.pm)

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#How_do_I_add_the_directory_my_pr
クックブック 12.7
534nobodyさん:03/08/28 19:51 ID:wikcpHV0
掲示板なんかで正規表現で自動リンクをしちゃってるわけですが、
リフェラでやってくる人がいるので、対策が必要です

リンク専用のCGIと受け渡しファイルを置いて、壁を作ろうと
思うのですが
掲示板のCGI → リンクをファイルに記録 → 専用CGIで読み出し飛ぶ

これで大丈夫ですか
もっといい手がありますか?
535nobodyさん:03/08/28 19:59 ID:???
536nobodyさん:03/08/28 20:00 ID:???
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
537nobodyさん:03/08/28 20:22 ID:???
おふぇら
おふぇら
おふぇら
おふぇら
538nobodyさん:03/08/28 20:59 ID:???
ime.nu挟めば簡単。
539あぼーん:あぼーん
あぼーん
540あぼーん:あぼーん
あぼーん
541あぼーん:あぼーん
あぼーん
542あぼーん:あぼーん
あぼーん
543あぼーん:あぼーん
あぼーん
544あぼーん:あぼーん
あぼーん
545あぼーん:あぼーん
あぼーん
546nobodyさん:03/08/29 14:40 ID:???
ime.nuは広告がアレな感じ。
547nobodyさん:03/08/29 15:27 ID:???
ime.nuの代わりにGoogleの I'm Feeling Lucky で飛ぶのはどうよ?

http://www.google.co.jp/search?btnI&q=[URL]
548nobodyさん:03/08/29 16:43 ID:???
(>543じゃ無いけど)

>547
ソレダ━━━━━(゚∀゚)━━━━━ッ
549nobodyさん:03/08/29 16:45 ID:???
534だった。
550nobodyさん:03/08/29 18:43 ID:???
http://nun.nu?http://URL
とかもあるぞよ。
googleは登録されてないURLでも飛べる?
551nobodyさん:03/08/29 19:24 ID:???
552nobodyさん:03/08/29 19:48 ID:???
553nobodyさん:03/08/29 19:54 ID:na9A2pd2
>>552
全部試したけど、それだけはok
全然個人的な場所でも飛べる、凄い凄い
554nobodyさん:03/08/29 23:29 ID:fl8oeL92
>>552
かんじんのurlが消せてない
http://rd.yahoo.co.jp/?http://www.ugtop.com/spill.shtml
555nobodyさん:03/08/30 00:18 ID:???
ほんとだ。これはLOCATIONヘッダで飛ばしてるな
556nobodyさん:03/08/30 13:01 ID:???
どうもレス数があわないとこがたまにあると思ったら
最新があぼーんされたとこだったのか
557あぼーん:あぼーん
あぼーん
558nobodyさん:03/08/31 17:26 ID:tuFrpWkq
perlでGoogleの検索結果を取得するプログラムとして、

open(SEARCH, "search");
(ファイルsearchには文字コードEUCでクエリーが書かれています)
$query = <SEARCH>;
chomp($query);

$url ="http://www.google.co.jp/search?q=".$query."&hl=ja&lr=&ie=EUC-JP&oe=UTF-8&start=10&sa=N";
として、
$rootpage=get($url)としたのですが、
うまくとって来てくれず$rootpageがundefになっています。
どう対処したらよいのでしょうか?
559nobodyさん:03/08/31 17:40 ID:???
>>558
get() って何?
560nobodyさん:03/08/31 17:45 ID:???
>>559
聞く前にぐぐれ
561558:03/08/31 17:47 ID:tuFrpWkq
LWP::Simpleモジュールにある
URL引数で指定されたドキュメントを返す関数です。
通常のページだとgetのカッコ内にurlを入れるだけで
そのページをとってこれるのですが、Googleではうまくいかないんです。
yahooの検索結果を取ってくるプログラムはできたのですが。。。
562nobodyさん:03/08/31 17:53 ID:???
561まであるらしいんだがNGのお陰で556でスレ止まってるのが笑える。
何が書き込まれてるんだ全く…。
563nobodyさん:03/08/31 17:56 ID:???
超気のせいだったゴメ
564あぼーん:あぼーん
あぼーん
565あぼーん:あぼーん
あぼーん
566あぼーん:あぼーん
あぼーん
567あぼーん:あぼーん
あぼーん
568あぼーん:あぼーん
あぼーん
569あぼーん:あぼーん
あぼーん
570nobodyさん:03/08/31 18:29 ID:???
>>558
UAではねられてるね。
別のモジュールを試すか、こそっとLWP::SimpleのUAを書き換えるか。
571nobodyさん:03/08/31 18:38 ID:OYZkvYjT
>>558
UAだねぇ。
でもスクリプト対策しているところからあえて取ってくるより、
別の検索エンジンを探すとかしたほうがいいかもよ?
(自分は、あえてするときはLWP::SimpleのUA書き換えてるけど)

ちなみに、$uaをエクスポートしてもらえば串を刺すなど
好き勝手できるのでお勧め。(普通にやるとアク禁されるからね)
572558:03/08/31 18:39 ID:tuFrpWkq
>>570
ご意見ありがとうございます。
さらに質問で申し訳ないのですが、
別のモジュールにはどのようなものがあるのでしょうか?
あと、UAとはUserAgentのことでしょうか?
573558:03/08/31 18:51 ID:tuFrpWkq
>>571
ご意見ありがとうございます。
こちらもさらに質問になってしまうのですが、
LWP::SimpleのUAの書き換えというのは、初心者にもできるでしょうか?
なにぶんPerlについての知識が乏しいもので。
もし難しいようでしたら、Googleでの取得はあきらめたほうがよさそうですし。
574nobodyさん:03/08/31 19:10 ID:???
ヒントもらったら、それを元に自分で調べたらどうか?
575570:03/08/31 19:12 ID:???
UAはUser Agent(HTTP_USER_AGENT)です。

別のモジュールはLWP::UserAgentでも、IO::Socketでも。
# 個人的にはIO::Socketが好きだけど、操作が面倒かも。

参照
ttp://member.nifty.ne.jp/hippo2000/perltips/lwpcook.html#GET
perldoc -m lwp
576558:03/08/31 19:19 ID:tuFrpWkq
>>575
丁寧に教えていただき、本当にありがとうございました。
アドバイスに従いやってみます。

577nobodyさん:03/08/31 20:12 ID:???
漏れはLWP::UserAgentを愛用している。
厨な漏れでもできる。
http://member.nifty.ne.jp/hippo2000/perltips/LWP/UserAgent.html
578558:03/08/31 20:40 ID:tuFrpWkq
>>577
御意見ありがとうございます。
さきほど、LWP::UserAgentを用いてやってみたのですが、
こちらでも同様な結果となってしまいました。
うーん、難しいですね。
579nobodyさん:03/08/31 20:44 ID:???
>>578
意味わかってないだろ
使い方の説明くらい読んだら?
580558:03/08/31 20:45 ID:tuFrpWkq
>>579
すいませんでした。
こちらの使い方が間違っているようですね。
これからもう少し詳しく読んでみます。
581558:03/08/31 22:12 ID:tuFrpWkq
LWP::UserAgentの使い方がようやくわかりました。
これで何とかなりそうです。
皆様ありがとうございました。
582nobodyさん:03/08/31 22:20 ID:ynlYypMb
素朴な質問なのですけど、どなたか教えて下さい。
あさっての会社の面接で知識のあるASP(VBScript)を主張しようと思っているのですけど、
ASP(VBScript)をはじめCGIやJavaなどの言語でさくせいするページ作成を、
「WEB系アプリケーション」っていう言い方で合っていますでしょうか?
583nobodyさん:03/08/31 22:25 ID:???
>>582
このスレッドのタイトルと>>1を読んでください。
584582:03/08/31 22:28 ID:ynlYypMb
>>583
あれ・・・、「WebProg 初心者の質問 Part5」って板に書いたつもりが、
違う板にかかれてしまったようです。
単なる凡ミスです。申し訳ありませんでした。
585nobodyさん:03/08/31 22:51 ID:3rubdTEF
ちょっと不可解で調べても分からんので誰かおしえて。

perlで同じdirectoryに3つのfileがあって
1.const.pm package宣言なし $AA = "okだよ";
2.sub.pm package sub;
require const;
sub bb{print "sub $AA\n";}
3.main.cgi package宣言なし
  require const;
&sub::bb;
print "main $AA\n";
とすると
sub okだよ
main
と表示されます。$main::AAでもだめ。
$main::AAと$sub::AAと別々に登録され両方
表示されると思っていたのですが・・
ただし、mainとsubのどちらかのrequire constを
require './const.pm'とすると
sub OKだよ
main OKだよ
と両方表示されます。
なんでだろう?長文ごめん。
586585:03/08/31 22:54 ID:3rubdTEF
ちょっと訂正
main.cgi
package宣言なし
require sub;<-ココ抜けてた
require const;
の間違い
587nobodyさん:03/08/31 22:58 ID:???
>>585Perlは、%INCに入ってると、読みません。
588585:03/08/31 23:18 ID:3rubdTEF
%INCに入っていないとってことですか?
sub.pmとmain.cgiで同じ指定require constとすると
はじめに読み込んだ方しか読み込めないってのが
どうも納得がいかんのです。それぞれ別のpackage変数として
シンボルテーブルに入ると思ってるんで。
589nobodyさん:03/08/31 23:38 ID:???
>>585
# Active Perl 5.6.1で異常終了するんですけど。。require sub;

ここはひとつ、doでドゥでしょ。(くるしー
590nobodyさん:03/08/31 23:58 ID:???
>>585
君は変数のスコープを誤解している。
別の言語とごっちゃになってないか?

#--- Const.pm ---
# package 宣言していないのでここは main パッケージ
$AA = 'OK.'; # $main::AA

#--- Sub.pm ---
package Sub;

# どの名前空間で読み込んでも Const.pm に書かれた
# コードの名前空間が変わるわけではない
require Const;

# パッケージ指定されていない => $AA eq $Sub::AA
sub bb { print "sub $AA\n" }
1;

#--- main.cgi ---
# package 宣言していないのでここは main パッケージ

require Const;
require Sub;
Sub::bb(); # "sub \n"
print "main $AA\n"; # "main OK.\n"
591585:03/09/01 00:02 ID:wUdXVEqP
>>589
以上終了ってsub.pmが@INCにないってこと?
5.6はカレントみてくれんのかな?
これ試したのはactive perl v5.8.0でした。
do調べてみます。
今まで一枚のfileに全て突っ込んでたけどstepupしようと
思ってfileわけるとこれだもんなあ。。
592nobodyさん:03/09/01 00:14 ID:???
foreach (@INC) {
print"$_\n";
}
してみれば
593585:03/09/01 00:15 ID:wUdXVEqP
>>590
># どの名前空間で読み込んでも Const.pm に書かれた
># コードの名前空間が変わるわけではない
ってことはどこでrequireしようとも$main::$AAとして存在するって
ことでしょうか?
main.cgi内でrequire subのほうをrequire constの前に書くと
&sub::bbの方はokが表示されてmain.cgiないのprint $AAのほうは
表示されないんですが・・
594585:03/09/01 00:29 ID:???
>>592
@INCを調べてみるとカレントは入っていませんでした。
ただ、requireの戻り値をみるとどのrequireも成功は
しているようです。
ということで@INCの問題ではないよな気がするんですが、
どうでしょうか?
595nobodyさん:03/09/01 00:34 ID:???
うちは入ってたけどね
消して試してみるか・・・
596589:03/09/01 00:34 ID:???
え、私?(なぜに…

perldoc -f require
すると吉。

で、doは
do 'const.pm';
の書式の方ね。ループさせないでね。
597585:03/09/01 00:38 ID:???
で、やりたいことは
const.pmで定数を用意して
各パッケージからconst.pm読みこんでその定数を使いたい。
この際問題なのが
定数を読み込むcgiから別のパッケージをrequireした時、
別のパッケージ内でも定数を読み込んでいると、
定数のrequireと別のパッケージのrequireの書く順番によって
どちらかのばっケージでしか定数が有効になっていないのです・・。
とりあえず、もう一回らくだ読みます。
598585:03/09/01 00:52 ID:???
requireをdoに変えると、main.cgiでのprintと
main.cgiからrequireされたsub.pmでのprintともに
const.pm内の変数をprintすることが出来ました。
requireとdoの違いを勉強してみます。
みなさん、ありがとうございました。
599nobodyさん:03/09/01 00:53 ID:???
>>593
すまん、俺も勘違いしてた。もう解決したみたいだが一応。

require はファイルに書かれたコードを*実行*するので、Sub.pm
(package Sub) 内で require Const; した場合、require 文のところが
$AA = 'OK.' に置き換わるような振る舞いになり、$Sub::AA = 'OK.'; と
等価。main.cgi (package main) 内で require Const; した場合は
同様に $main::AA = 'OK.'; と等価。

で、require は %INC を見て一度読み込まれたファイルはスルー
するので、先に呼び出した方の名前空間に $AA が 定義され、
もう一方には定義されない。

do なら毎回読み込むので、両方に $AA が定義される。但しこれは
$Sub::AA と $main::AA で、それぞれ別の変数。Sub.pm 内で $AA を
変更しても $main::AA に反映されるわけではないので注意な。

>>597 のようなニーズなら、単に Const.pm で package Const;
として、require する側では $Const::foo 等と読めばいい。
パッケージ名で修飾するのがイヤなら perldoc Exporter 。
600585:03/09/01 01:19 ID:???
>>599
requireの一度読み込まれた場合ってのがkeyですね。
一度読み込まれたってのがどういう条件で判断されるのか。
あるpackage内でなのか(今回の例でこれは違うだろうけど),
あるファイル内でなのか(requireされたコードも含む)
あるプロセスでなのか。
昨日からのムカムカが後少しですっきりします。
みんな、ホントに感謝!!
601あぼーん:あぼーん
あぼーん
602あぼーん:あぼーん
あぼーん
603あぼーん:あぼーん
あぼーん
604あぼーん:あぼーん
あぼーん
605あぼーん:あぼーん
あぼーん
606あぼーん:あぼーん
あぼーん
607あぼーん:あぼーん
あぼーん
608あぼーん:あぼーん
あぼーん
609nobodyさん:03/09/01 13:45 ID:???
共有サーバなのでPerlのモジュールとかインストールできないんですが、
UTF-8からUTF-7へ変換出来る.plのライブラリってありますか?

jcodeとかは、そもそも.pmでないとユニコードすら対応していないので・・・
610nobodyさん:03/09/01 14:21 ID:???
>>609
base64.pl
611あぼーん:あぼーん
あぼーん
612あぼーん:あぼーん
あぼーん
613あぼーん:あぼーん
あぼーん
614あぼーん:あぼーん
あぼーん
615nobodyさん:03/09/01 15:09 ID:fFXrj9/A
初心者本を読み終えて、自分でPerlを書いてみたんですが
うまくいきません、、、。

htmlファイルのフォームで受け取ったデータをcgiにpostして
そのデータをファイルに書き込み、確認のhtmlを出力したいのですが、
# ------ここから出力--------
print "Content-type:text/html\n\n";

print << "END_OF_HTML";

<html>
<head>
<title>確認</title>
</head>

<body>

$form1{'a'}を$form1{'x'}ですね。<br>

</body>
</html>

END_OF_HTML
616nobodyさん:03/09/01 15:11 ID:fFXrj9/A

って感じで出力するhtmlの中に日本語を入れるとそこから
<title /title>となり
htmlのソースがおかしくなってしまいます。
日本語を使わなければ、正しく表示されます。
ちなみにcgiファイルに直接アクセスすると、
「をですね。」と変数は表示されずに
htmlは正しく出力されています。

原因を教えて戴けませんでしょうか?
お願いします。
617nobodyさん:03/09/01 15:13 ID:???
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
を入れてみたら?
618nobodyさん:03/09/01 15:13 ID:???
>>617のcharsetは使ってる文字コードに置き換えて。
619nobodyさん:03/09/01 16:05 ID:???
ちゃんとフォームの中身は受け取ってるんですかね?
まさか、↑のが全てじゃないよね。
620nobodyさん:03/09/01 17:06 ID:fFXrj9/A
>>617
有難う御座います。教えて戴いた事を試してみたんですが、
解決しませんでした、、。

そこで試しにもう一度初めから書き直してみたら、うまくいきました(汗

そこで、以前のファイルと比べてみようと開いてみたら
元のファイルが文字化けしてしまいました。

原因は初めそのファイルをemacsで作っていて、途中でgeditで編集
した時に文字コードが変わってしまっていた事のようです。
ご迷惑をおかけしました。
621609:03/09/01 19:49 ID:???
>>610

御察しが良いようで。
UTF-8形式でPOSTされたデータをsendmailで送りたかったのですが、
Base64で符号化、という方法もありましたね。
ところが、UTF-8をBase64で符号化すると、
漢字を含む文章を正しく表示できなくなってしまうようです。
今度はQuoted PrintableでGogってます。

>>rPbXixOt
荒らし?
622nobodyさん:03/09/01 21:07 ID:???
>>621
そう。粘着荒らし。このスレのあぼーんはほとんど奴。
削除依頼して削除するのも荒らしをかまうことにならないのかな・・・
623nobodyさん:03/09/01 23:31 ID:???
こんばんは。
先月からPerlの勉強始めて、初心者なのですが
検索した結果、わからなかったため質問させていただきます。
勉強を兼ねて掲示板を作成中で、METHOD="POST"
でHTMLからCGIにデータを送って処理させています。
コード化されて転送される漢字の”十”にバックスラッシュの
コードが含まれていて、文字化けがおこるとのことですが、
処理後、表示される文字は文字化けがおきていません。
jcode.plでデコード処理をおこなったり、CGIにデコード処理の
プログラムを追加することで防ぐそうですが、必要性がいまいち理解
できません。また、ほとんどのCGIプログラムではGETとPOSTとの違いが
わからないようにしているそうですが、GETはセキュリティが弱いため
隠すのはわかるのですが、POSTを使っていけない理由がわかりません。
長文になりましたが、先輩方ご教授ください。
624nobodyさん:03/09/01 23:44 ID:???
>>623
>ほとんどのCGIプログラムではGETとPOSTとの違いがわからないようにしているそうですが

へ?ソースのformタグ見ればわかるじゃん
625nobodyさん:03/09/01 23:45 ID:???
まず、誰が使ってはいけないと言ったのか。
626623:03/09/01 23:52 ID:???
レスありがとうございます。
ttp://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/avoid-get-non-queries.html
このサイトに違いがわからないようにしてある。という記述がありました。
言葉が悪かったですが、つかってはいけないということではなく、なぜわからなく
する必要があるのかがわかりませんでした。セキュリティの為という幼稚な答えしか
思い浮かびません。
この疑問にあたったのも、そもそもはPOSTを使い、jcode.plを使わずに何の問題も
ないことからなのですが、どのサイトに行っても、デコードとjcode.plを解説しているので
わからなくなってしまった次第です。
627nobodyさん:03/09/02 00:18 ID:???
>>626
POSTとGETの違いを「意識させない」ように
CGIライブラリが作ってあるって意味。

ブラウザとCGIのやり取りは次のようになる。
1. データをURLエンコードする。(ブラウザがやってくれる)
2. CGIでデータをURLデコードする。(上のCGIライブラリや自力でデコード)
3. 必要に応じて文字コードを変更(統一)する。

で、文字化けに関係してくるのは 3.の部分で、
SJISの「十」は0x8f 0x5cになり、2バイト目が0x5c=「\」と一致する。
そのため次の文字の1バイト目がエスケープされる。
そうすると1文字目の1バイト目と2文字目の2バイト目が合体(キメラ化)して
別の文字になってしまうというわけだ。
628nobodyさん:03/09/02 00:26 ID:???
>>623
バックスラッシュが含まれて化けるのは、
あくまでリテラルの話な
629623:03/09/02 00:33 ID:???
回答ありがとうございます。
キメラ化の話はサイト巡回中にあったとおもいます。
また、いろいろ考えてみたのですが
POSTで送られてきたデータを@value=param('name')として格納した後
各スカラーに($1,$2,$3)=@valueとして格納するのと

POSTで送られてきたSTDINからread関数でスカラーに格納して、必要に応じて
splitして各スカラーに格納した後に、jcode.plによって漢字変換する方法で

前者は@valueに格納された文字がすでに漢字であり、jcode.plにかける必要がなく
後者はSTDINの内容がメタ文字などを含むコードになっていて、漢字変換する必要がある

という考え方でよろしいのでしょうか?
あまりに基本的な話すぎて申し訳ないです・・
630623:03/09/02 00:35 ID:???
↑追記:送られてくるデータが漢字の場合です。
631nobodyさん:03/09/02 01:34 ID:???
>>630
インターネット上では、日本語の文字セットとして
EUC-JP,Shift_JIS,ISO-2022JP
等が使われています。
それぞれのコードには互換性がないので、これを変換して
一つの文字セットに統一するものがjcode.pl(jcode.pm)です。
632nobodyさん:03/09/02 09:00 ID:???
ある文字列の、先頭40バイトだけを取り出したいのですが、
40バイトが、マルチバイトのたとえば「男」の先頭1バイトだった場合、
39バイト(つまり、「男」の直前まで)だけを取り出す、という処理は、
perlではどうすればいいのでしょうか
633nobodyさん:03/09/02 09:36 ID:???
40byte目がマルチバイトかどうか調べて、そうでない場合は
40byte取り出し、そうである場合は39byteまで取り出す。
euc-jpだったら、
if (/^.{39}[\xA1-\xFE]/) {
print $1, "\n";
} else { print substr($_, 0, 40), "\n";}
shift-jisだったらでき・・

634nobodyさん:03/09/02 09:37 ID:???
(.{39})だった。
635 ◆aiY4htt2.2 :03/09/02 09:37 ID:???
>>632
my $message = 40 バイトで強引にぶった斬った Shift-JIS な文字列;
my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
my $check2 = '[\201-\237\340-\374]';
$message =~ s/($check1)$check2$/$1/g;

こんな感じかも。
(♪ch携帯対応改造で使ったやつの引用)
636nobodyさん:03/09/02 11:40 ID:???
EUCでもいっしょだよ
ほんとはループさせて終端からチェックし、確実に漢字1バイト目じゃないところまで
戻って、そこから進めると最後がASCIIか漢字の1バイト目か2バイト目かわかる

でも40バイトなら先頭から数えても問題ないけどね
637560:03/09/02 12:09 ID:???
ありがとうございます。
SJISだったんですが(←言ってなかったですね、すみません)、
直前にEUCに変換して、
>>561さんのを使わせてもらって、
また、SJISに戻しました。

ありがとうございました。
638nobodyさん:03/09/02 12:17 ID:nOZ+Ay6O
>>633-634
('あ' x 20)をそのルーチンに通したら文字化けするよ。

>>635-636
そんな面倒なことしなくても、EUC文字列の場合単にMSBが立ってるバイト数を
偶数にすれば良いだけだから、

$text = substr($text, 0, 40); # 40バイト取る
$msb = '[\x8E\xA1-\xFE]'; # EUC文字片
chop $text if tr/$msb/$msb/ % 2;

これでOK。(JIS X 0212の存在は無視)
639nobodyさん:03/09/02 12:19 ID:???
>638
文字列の中にダブルバイトとシングルバイトが共存してる事はありえないの?
640nobodyさん:03/09/02 12:19 ID:???
あぁ、勘違い。
忘れてくれ。
641632:03/09/02 13:00 ID:???
560じゃなくて632だったです。
OpenJaneで番号ずれてた・・・
642nobodyさん:03/09/02 13:06 ID:???
>>641
>>633のは機能しませんよ。
643632:03/09/02 13:39 ID:???
>>642
え、まじすか・・・
644632:03/09/02 13:53 ID:???
>>633
確かに2バイトの真ん中できれてますた
645nobodyさん:03/09/02 15:43 ID:???
264.pts-0.venus(Attached)
という文字列(先頭はタブ)から"264"を抜き出したいんですが
どう書けばいいのか分かりません。

$str = "264.pts-0.venus(Attached)";
m/\t(\d)*?\.pts.*/;
print $1;

で何も表示されず。アドバイス下さい。
646nobodyさん:03/09/02 15:44 ID:???
>>645
$str =~ m/\t(\d)*?\.pts.*/;
の間違いです。それでもうまく行かないです。
647nobodyさん:03/09/02 16:49 ID:???
>>646
$str =~ m/\t(\d*?)\.pts.*/;
?ん?もしや釣り?
648nobodyさん:03/09/02 17:09 ID:???
釣れたぞ、おい
649nobodyさん:03/09/02 20:10 ID:???
>>632
>>635さんので動くとおもうけど、もうひとつ。
my $sub = substr($str, 0, 40);
$sub =~ /^(?:[\x20-\x7e\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/ or chop $sub;

>>646
こうでも。
$str = "\t264.pts-0.venus(Attached)";
$str =~ m/^\t(\d+)\.pts/;
print $1;

次回からはこちらへどうぞ。
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
650nobodyさん:03/09/03 02:57 ID:8C5hGjxK
みなはんエディタは何使ってる?
今まで秀丸オンリーだったけどちと検索したら
いろいろあったもんで。
perleditor
cgi_edit
perl debugger
perlを始めよう!
などなど。なんかお勧めのない?
651nobodyさん:03/09/03 03:02 ID:???
oeditは軽いがtxt,html,Perlなどを編集できる。
652nobodyさん:03/09/03 03:05 ID:???
>>650
vi に決まってんじゃん。
653nobodyさん:03/09/03 03:05 ID:???
>>650
多分思いっきりスレ違いです。

Perl書くのにどんなエディタ使ってる?
http://pc2.2ch.net/test/read.cgi/php/1014357485/
使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/
秀丸よりも優れたフリーエディタ
http://pc2.2ch.net/test/read.cgi/tech/1052919371/
654650:03/09/03 03:07 ID:???
こ、これは失礼しました・・・
655nobodyさん:03/09/03 03:31 ID:???
viでperlはきつい。
656nobodyさん:03/09/03 03:36 ID:???
ネタじゃないんですけどね。。
>>649
のまま張り付けたけど何も出力されませんでした(´・ω・`)ショボーン
657nobodyさん:03/09/03 03:50 ID:???
>>650
xyzzy。他の言語もこれ。
658nobodyさん:03/09/03 03:53 ID:???
>>655
どの辺が?
659nobodyさん:03/09/03 04:16 ID:q0K9DyHf
htmlのformからcgiに
aa=1,ab=2,ac=3,ba=4,bb=5,bc=6
って送って
$data1 = "$form{'aa'}$form{'ab'}";
$data2 = "$form{'ba'}$form{'bb'}";
$data{'$data1'}= $form{'ac'};
$data{'$data2'}= $form{'bc'};
とした場合に
print $data{'$data1'},$data{'data2'}
は3,6と出力されるのに
print $data{'12'},$data{'45'}
は何も表示されません。

この場合、%dataのキーである12と45は数値データではなく
文字列データとして扱われているのでしょうか?

またその場合、$data{'"12"'}としても12は文字列データとして
代入できないのですが、どのようにすれば代入できますかね?
660nobodyさん:03/09/03 05:50 ID:???
>659
" と ' の違い
661nobodyさん:03/09/03 07:45 ID:???
なんか、スレ違いのような気もするんですが、どこに書いて良いか分からないので…。
クッキーをセットする時、独自ドメインならアドレスを「/」にしても問題は無いんでしょうか?
http://xx.xx/A/http://xx.xx/B/の2つのディレクトリで参照したいんですが
他にやり方がわかりません。
662nobodyさん:03/09/03 09:07 ID:???
>>661
ない。
path=/
663nobodyさん:03/09/03 09:54 ID:???
>>662
ありがとう!
664659:03/09/03 15:17 ID:???
>>660さん
ども。しかし、$data{'12'}としても$data{"12"}としても
出力されないんです、、、。

それとも、もっと前の部分で'と "を使いわけろと言うこと
でしょうか?
665nobodyさん:03/09/03 15:34 ID:???
>>664
$data{'$data1'} => $data{"$data1"}

ちょっと考えればわかる
666665:03/09/03 15:47 ID:???
もっといえば、$data{$data1}でいい。
print '$data1';
print "$data1";
print $data1;

この3つやってみたら?
667nobodyさん:03/09/03 16:49 ID:Z3bfhz4O
Windows環境でPerlをやろうと思い、とりあえず本を買うことにしました。
そのため、↓(2ch Books)でお勧めされている初めてのPerl第3版を買おうと思ったのですが、
ttp://www.1point.jp/~book_2ch/webprog/perl.html
Windowsに十分対応しているか不安です。どなたか持っている方教えていただけないでしょうか。
スレ違いであったら申し訳ありません。よろしくお願いします。
668nobodyさん:03/09/03 16:55 ID:???
初心者です。

”my”と”local”は違うのでしょうか?
”my”が手元の入門書で使われていないので判りません。

教えて下さい。
669nobodyさん:03/09/03 17:18 ID:???
>>667
はじめてのPerl WIN32 とかいうの発売されてなかったっけ?
670nobodyさん:03/09/03 17:29 ID:???
ある文字列の中に、ピリオドが2つ以上含まれているかどうかを判断するには、
どうすればいいのでしょうか?
671nobodyさん:03/09/03 17:36 ID:HPS+c9jA
>>670
こんな感じ?

if ($str =~ /\.(.*)\./) {
print "含まれてます";
}
672nobodyさん:03/09/03 17:43 ID:???
>>671
文字列が巨大でなければこっちの方が早い。

if( ($str =~ tr/././) >= 2){
  print "含まれてます\n";
}
673nobodyさん:03/09/03 17:50 ID:???
>>668
違います
674nobodyさん:03/09/03 17:57 ID:???
localは変数を新しく作るんじゃなくて、一時的に"退避"させるんだったっけ
675nobodyさん:03/09/03 18:08 ID:???
676nobodyさん:03/09/03 18:09 ID:???
$a = '1';
print "$a\n"; #=> 1
{
 my $a = '2';
 print "$a\n"; #=> 2
 print "$main::a\n"; #=> 1
}
{
 local $a = '3';
 print "$a\n"; #=> 3
 print "$main::a\n"; #=> 3
}
print "$a\n"; #=> 1
677nobodyさん:03/09/03 19:57 ID:???
>>676
誰にレスしてんねん。
678nobodyさん:03/09/03 20:27 ID:???
>>677
>>676じゃないが、コンテキストからわかるだろ。

そういえば、<IN>でループ回してるときに
print <IN>;
とかやっちゃって失敗したのを思い出した。
679668:03/09/04 19:47 ID:???
>673 674 675 676
亀ですみませんでした。 レスありがとうございます。 m(__)m
使い方が判りました。 簡単なパッケージを作って確認してみます。
680あぼーん:あぼーん
あぼーん
681あぼーん:あぼーん
あぼーん
682 :03/09/06 05:53 ID:???
掲示板スクリプトで自動生成したログファイルを
削除したいのですか、ターミナルからrmコマンドを
使ってもpermission deniedが出て消せません。
ローカルでやる時はスーパーユーザーになって
消せますが、ISPの鯖に上げて動かし生成した
ものは自分では消せないようです。どうすれば
良いのでしょう?
683nobodyさん:03/09/06 06:00 ID:???
>>682
強引に削除するスクリプトを描いて設置しる。
CGI になるかと思うので、レスポンス、エンティティヘッダの出力をお忘れにならないように。
684682:03/09/06 06:04 ID:???
こんな感じででしょうか?
#!/usr/bin/perl
unlink("ファイル名前");
exit;
685nobodyさん:03/09/06 07:42 ID:???
>>684
それだとエラーに
#!/usr/bin/perl
unlink("ファイル名前");
print "Content-type: text/plain\n\n";
exit;
686nobodyさん:03/09/06 07:45 ID:???
>>685
687nobodyさん:03/09/06 07:51 ID:???
>>685
本当に消えたのかどうかはっきりさせるために、
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print unlink("ファイル名前");
exit;
とするのはどうか。
688682:03/09/06 08:13 ID:qOA5ehbE
あ、ターミナルからではなく、ブラウザから
アクセスして動かさないといけないってことですか。
689nobodyさん:03/09/06 09:42 ID:???
>>685
>>684は表示がエラーになるだけでプログラムはちゃんと動いてる。
ファイル消すだけなんだから別に>>685のようにしなくてもいいと思うが。
まあ>>687みたいにするのもいいけど。

あと
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
unlink("ファイル名") or die $!
とか。
690nobodyさん:03/09/06 10:19 ID:???
つーか、Webサーバー権限でCGIが実行されるような糞なところは使うなよ。
691nobodyさん:03/09/06 12:14 ID:???
>>690
iswebっていまだにそうなの?
692682:03/09/06 14:05 ID:???
うまく消せるようです。
ありがとうございました。
693nobodyさん:03/09/06 16:17 ID:???
消すにはそのファイルが含まれるディレクトリにwriteがないと無理
cgiでディレクトリ作ってパーミッション設定忘れるとそうなるねえ
694nobodyさん:03/09/06 21:22 ID:DXHBOkzn
2個のCGIから書き込み可能なファイルは、片方のCGIでロックファイルした場合に、もう一方のCGIから見てもファイルロックされているのでしょうか。
flockでやろうと考えてるんですが、誰か教えてくだせえー
695nobodyさん:03/09/06 21:46 ID:???
>694
【Perl】ファイルロック(はいた処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
696nobodyさん:03/09/06 22:46 ID:???
>>694 問題なくロックされる。
697あぼーん:あぼーん
あぼーん
698あぼーん:あぼーん
あぼーん
699あぼーん:あぼーん
あぼーん
700あぼーん:あぼーん
あぼーん
701あぼーん:あぼーん
あぼーん
702あぼーん:あぼーん
あぼーん
703あぼーん:あぼーん
あぼーん
704あぼーん:あぼーん
あぼーん
705あぼーん:あぼーん
あぼーん
706あぼーん:あぼーん
あぼーん
707あぼーん:あぼーん
あぼーん
708nobodyさん:03/09/07 14:40 ID:u7agmyKi
ちょっとこのスレの趣旨と違うかもしれませんが質問させてください。

今SSIを使って<!--#exec cmd="./aaa.cgi" -->という形で
ランダムでテキスト表示をしています。別にtxtファイルがあり、
その中にある文章を表示するという形です。
そのtxtファイルの中にただの文字列ではなく
<!--#exec cmd="./bbb.cgi" -->というような別のSSIでさらに
ランダムでテキスト表示するための文字列を加えたいのですが、
何も表示されません、
こういう芸当は無理なのでしょうか?
709nobodyさん:03/09/07 14:56 ID:???
>>708
思いっきりすれ違いな気がするけれども

#! /usr/........
open(F, "textfile.txt") or exit;
@text = <F>;
close F;

print $text[int rand($#text+1)];

じゃ無理なの?
710nobodyさん:03/09/07 15:06 ID:???
>>708
もしできたら永遠にループして困るだろーがよ。
711708:03/09/07 15:11 ID:u7agmyKi
>>709
それだと普通のランダム表示だと思うのですが・・・。
やっぱりスレ違いなんですね。
それっぽいスレがなかったもので、すいません。
712709:03/09/07 15:13 ID:???
あぁ、意味を取り違えてた。
でも、んなことする必要なくない?
713708:03/09/07 15:14 ID:u7agmyKi
>>710
ループしてしまうものなんですか?
一度出力したら終わりと思っていたのですが。
714708:03/09/07 15:18 ID:u7agmyKi
必要と言われるとそんな気もします・・・。
やっぱり出直します。スレ汚し失礼しました。
715nobodyさん:03/09/07 15:25 ID:???
最初に起動するCGIで全部処理すればいいだけの話。
716nobodyさん:03/09/08 09:51 ID:???
この辺はHTTPサーバ依存だと思うが、できるやつは無いかもね
Apacheのドキュメントにははっきりと、できないしする予定も無い事が書いてある
717nobodyさん:03/09/08 14:20 ID:???
たしかこのスレで、
あるディレクトリ($path)のtmpで始まるファイルだけを消す方法を尋ねたら、

opendir(DIR, $path) or die;
unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);

という答えをもらいまして、
実際にためしたのですが、
消えません。。(ちなみに、dieにもなっていない)

どうすればいいのでしょうか・・・他の方法でもいいので。
(ただ、cgiからunixコマンドを呼び出すことはできない環境です。(のでrm とかできない))
718nobodyさん:03/09/08 14:27 ID:X5G7G9R4
1. やりたいこと:文字列中の漢字をひらがなに変換したい。
2. 試してみたこと
#!/usr/bin/perl
use NKF;
use Text::Kakasi;
use Text::ChaSen;
print "Content-type: text/html\n\nOK!";
exit;
を実行して、ChaSenが鯖に入っていることを確認。

で、googleでサンプルを探したのですが、見あたりません。
ChaSen使っている方いないでしょうか。
719nobodyさん:03/09/08 15:29 ID:???
>>718
perldoc見たか?
720nobodyさん:03/09/08 16:19 ID:???
>>717
$path の内容の末尾に「/」が入っている悪寒。
721nobodyさん:03/09/08 16:25 ID:???
>>717
とりあえずmap { print "$path/$_" }して中見てみれば?
722718:03/09/08 17:10 ID:???
>>719
情報有り難うございます。以下のスクリプト
---------------------------------
#!/usr/bin/perl
use NKF;
use Text::Kakasi;
use Text::ChaSen;
$res = Text::ChaSen::getopt_argv('chasen-perl', '-j', '-F', '%m ');
$str = Text::ChaSen::sparse_tostr("日本語の文字列");
print "Content-type: text/html\n\nOK!";
print $str;
exit;
---------------------------------
を実行したら、
/usr/bin/perl: relocation error: /usr/lib/perl5/site_perl/5.6.1/i386-linux/auto/Text/ChaSen/ChaSen.so: undefined symbol: chasen_getopt_argv
とエラーメッセージが出てしまいました...
723nobodyさん:03/09/08 17:13 ID:bPmk+TI6
1. フォームから送ったデータを別ファイル「fileA.dat」に書き込み、その「fileA.dat」から読み出したデータで分岐をさせたい。

2.jcode.plでデータのコード変換を試みたがうまくいかない。
別の変数に代入を試みたが元データがフォームから送られてきたものである限りうまくいかない。

3. その「fileA.dat」が一枚なら問題ないのだが、ループさせて「fileA[00-99].dat」のようにファイルを複数個つくると、
ファイルがUnicodeで勝手保存されてうまくいかない。
データはブラウザ上では問題なく表示されるが、if文などの分岐の文字列として機能しない。

質問の書き方はこんな感じでよろしいでしょうか?
なにか分かりにくい点がありましたらお手数ですが、レス宜しくお願いします。
どうかお助けください。
724nobodyさん:03/09/08 17:48 ID:???
>>723
それじゃやってくれってことでしょ
うまくいかないコードぐらい貼って
725723:03/09/08 18:09 ID:bPmk+TI6
>>724さま

失礼しました、こちらにコードをアップしました。
よろしくお願い致します。
http://uailehpo.hp.infoseek.co.jp/tmp.txt
726723:03/09/08 18:16 ID:bPmk+TI6
tmp.txt = tmp.cgi で配置とパーミッションは、

tmp.cgi(755)
lib(755)/
cgi-lib.pl(644)
data_box(755)/

です。
727723:03/09/08 18:17 ID:bPmk+TI6
タブは表示されないのですね、失礼しました。
tmp.cgi(755)
lib(755)/cgi-lib.pl(644)
data_box(755)/
です。
728nobodyさん:03/09/08 19:08 ID:???
>>725
チェックボックスのvalueを全部同じにしてわざわざ「,」で区切るなんて
根本的にフォームの使い方がおかしい
それにチェックボックスの状態を記録するためだけに
datというファイルをあえてたくさん作りたい理由はあるのか?
729723:03/09/08 19:38 ID:???
レスありがとうございます。
すみません超素人なんです…。
プロの方からみれば本当にどんくさいことをしていると言うのも重々承知しております。
もし宜しければ代替案のヒントなどいただけるとうれしいです。
730nobodyさん:03/09/08 20:24 ID:3AX/sDx8
誰かKENT氏のMT-BOARD持ってる人いませぬか
731nobodyさん:03/09/08 20:31 ID:???
持ってますが何か?
732あぼーん:あぼーん
あぼーん
733あぼーん:あぼーん
あぼーん
734あぼーん:あぼーん
あぼーん
735あぼーん:あぼーん
あぼーん
736あぼーん:あぼーん
あぼーん
737あぼーん:あぼーん
あぼーん
738あぼーん:あぼーん
あぼーん
739あぼーん:あぼーん
あぼーん
740nobodyさん:03/09/09 13:25 ID:Art/HRbf
置換演算子s///の、/eオプションについての質問です。

$a = 'A';
$_ = '$a';
print $_, "\n"; # $aと表示

s/(\$\w+)/$1/ee;
print $_, "\n"; # Aと表示。なぜこうなるのか、どなたかご教示ください。
741nobodyさん:03/09/09 13:31 ID:???
>>740
マッチした文字列(この場合は変数名)を式として評価したから。
じゃないの?
742nobodyさん:03/09/09 13:36 ID:???
>>740
$a = 'A';
$ab = 'hoge';
$_ = '$a';
s/(\$\w+)/$1 . 'b'/ee;
print; # hoge
743740:03/09/09 13:53 ID:???
>>741, >>742
さっそくのレス、どうもありがとうございます。

742さんの例だと、1回目の/eで置換文字列は'$ab'になり、2回目の/eで
'hoge'になるということですね。

文字列連結を行っていない740の場合、なぜ2回の/eeが必要なのかわからない
のです。
744nobodyさん:03/09/09 14:13 ID:???
>>743
マッチした文字列(この場合は変数名)を式として評価したから。
じゃないの?
745nobodyさん:03/09/09 15:41 ID:???
    /\___/ヽ   ヽ
   /    ::::::::::::::::\ つ
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ
746nobodyさん:03/09/09 16:19 ID:???
巨大な文字列$varがあったとして、先頭128バイトが要らないとき、
余分な代入をせずに、これを無視する方法はありますか?

つまりCでいう
  char* p = &var;
  p += 128; // 以後は p を使ってアクセス
のようなことがしたいのですが。
747740:03/09/09 16:38 ID:???
>>742
$a = 'A';
$ab = 'hoge';
$_ = '$a';
s/(\$\w+)/$1.'b'/; print $_, "\n"; $_ = '$a'; # $a.'b'
s/(\$\w+)/$1.'b'/e; print $_, "\n"; $_ = '$a'; # $ab
s/(\$\w+)/$1.'b'/ee; print $_, "\n"; # hoge

# 上の表示をじっと見ると、文字列連結しないなら、下のようになるのは当然
# でした。お騒がせいたしました。

$_ = '$a';
s/(\$\w+)/$1/; print $_, "\n"; $_ = '$a'; # $a
s/(\$\w+)/$1/e; print $_, "\n"; $_ = '$a'; # $a(/eなしと同じ)
s/(\$\w+)/$1/ee; print $_, "\n"; # A
748nobodyさん:03/09/09 17:05 ID:OBePyqIf
簡単だと思いますが、自力でわからないのでご回答願います。

文字列$strの中に「,」がいくつ含まれているかを表示させる方法
749nobodyさん:03/09/09 17:17 ID:???
>>748
$count = ($str =~ tr/,/,/);
print $count;
s///とtr///(y///)は変換(置換)した文字数を返す。
750748:03/09/09 18:29 ID:OBePyqIf
なるほど!ありがとうございます。
751nobodyさん:03/09/09 18:49 ID:???
>>746
$var = substr($var, 128); じゃダメ?
752nobodyさん:03/09/09 19:37 ID:???
メールアドレスで自動リンクの仕方はどうやるのでしょうか?
753nobodyさん:03/09/09 19:48 ID:???
754nobodyさん:03/09/09 20:32 ID:v/xCzILp
@fine=(['クーラー','#eeeeee'],
    ['エアコン','#eeeeee']);

foreach(1 .. $#fine){
$y1[79] =~ s/$fine[$_][0]/
<span style="color:$fine[$_][1]">
$fine[$_][0]<\/span>/g;

でやってるんですが、どうもクーラーの
ーがいけないみたいで表示が真っ黒に
なってしまいます。
あと夕の文字も駄目みたいなんですが、
対処法を記載して下さい。
ーを半角にすると大丈夫みたいですが。。。
755nobodyさん:03/09/09 20:50 ID:???
>>754
>foreach(1 .. $#fine)
foreach(0 .. $#fine)じゃないかい?
756あぼーん:あぼーん
あぼーん
757あぼーん:あぼーん
あぼーん
758あぼーん:あぼーん
あぼーん
759あぼーん:あぼーん
あぼーん
760あぼーん:あぼーん
あぼーん
761あぼーん:あぼーん
あぼーん
762あぼーん:あぼーん
あぼーん
763nobodyさん:03/09/10 01:46 ID:???
>>754
>>755
むしろ、全部ぶん回したいなら、
foreach ( @fine ) {
$y1[79] =~ s/$_->[0]/
<span style="color:$_->[1]">
$_->[0]<\/span>/g;
}
こうした方が。
764nobodyさん:03/09/10 03:08 ID:???
765あぼーん:あぼーん
あぼーん
766あぼーん:あぼーん
あぼーん
767あぼーん:あぼーん
あぼーん
768あぼーん:あぼーん
あぼーん
769あぼーん:あぼーん
あぼーん
770あぼーん:あぼーん
あぼーん
771あぼーん:あぼーん
あぼーん
772あぼーん:あぼーん
あぼーん
773nobodyさん:03/09/10 10:17 ID:nCyeQoyB
ここに長いこと粘着してる荒らしって前にパンチとかキックとか言ってたやつ?
774nobodyさん:03/09/10 10:35 ID:???
>>773 そう。あれからずっと自己紹介し続けてる。
775nobodyさん:03/09/10 11:15 ID:ehR5IsOg
申し訳ありません、コンパイルエラーのことを聞くのは恥ずかしいとは思うのですが、
どこで発生しているのか見当すら付きません。

[Wed Sep 10 11:02:42 2003] [notice] Apache/1.3.27 (Unix) configured -- resuming normal operations

[Wed Sep 10 11:02:42 2003] [notice] Accept mutex: sysvsem (Default: sysvsem)

Can't use global @_ in "my" at /usr/local/lib/perl5/5.6.1/Carp/Heavy.pm line 30, near "return @_ "

Compilation failed in require at /usr/local/lib/perl5/5.6.1/Carp.pm line 97.

というエラーは、どこでどう発生しているのか、発見する方法について何かご存知の方がいらっしゃればアドバイスをお願いいたします。
776 :03/09/10 11:36 ID:???
フィーバー
777nobodyさん:03/09/10 12:06 ID:fP87jQDg
すいません
PerlでBBSを作っていますが
unshiftで配列だと新しい記事は上につくんだけど
2chのように下につけるにはどのようにするのですか?
778あぼーん:あぼーん
あぼーん
779nobodyさん:03/09/10 13:00 ID:???
>>777
push …でいいのか?
780あぼーん:あぼーん
あぼーん
781754:03/09/10 18:37 ID:Bi+qgamu
例えばコンピュータに色を付けたい時に、
色の指定の所で、「ー」の記号を使うと
エラーになるみたいなので、
コンピュとタの間に色の指定をする事
は出来ないでしょうか?
782nobodyさん:03/09/10 18:47 ID:v9aJB7Z5
JPEGファイル限定で<INPUT TYPE=FILE>タグからPOSTされてきた画像を
鯖に保存する際、オリジナル以外にサムネイルも一緒に保存したいのですが、
何かよい.plライブラリはありませんでしょうか?
オリジナルファイルを保存することは簡単にできたのですが。

ググッっても、うまく見つけれずにいます。
知識者の方、よろしくお願いいたします。
783nobodyさん:03/09/10 18:52 ID:v9aJB7Z5
>>781
トーシロで申し訳ないが、文字を抽出する時、
全角2バイトの1バイト目が[\x81-\x9F\xE0-\xFC]の場合を
考えてみたらどうでしょうか?
784nobodyさん:03/09/10 18:55 ID:???
>>781
「ー」の2バイト目は0x5b→[
「タ」の2バイト目は0x5e→^
どっちもメタ文字だから。
\Qでも使ってエスケープしてみれ。
785あぼーん:あぼーん
あぼーん
786あぼーん:あぼーん
あぼーん
787あぼーん:あぼーん
あぼーん
788あぼーん:あぼーん
あぼーん
789nobodyさん:03/09/10 23:15 ID:1gfPV2JX
>782
サーバーにImageMagickが入っていれば簡単ですよ。
確認してみたら。
ちなみに、オレはロリポというサーバーで使っているよ。
790nobodyさん:03/09/10 23:32 ID:???
>>775
ドイツ語だけど、こんなの見つけた。
ttp://www.rede-mit.de/cgi/archiv/thread791.shtml
791nobodyさん:03/09/10 23:38 ID:???
すんまそん。ActivePerl v5.8.0 built for MSWin32-x86-multi-thread です。
関数でハッシュを返したいんですが、
リファレンスで返せばいいことまではわかりました。
しかし、リファレンスで返した後どう参照したらいいかがわかりませんです。
どぼじて?

<code>
sub test {
  my %ret = { '01' => "test01" , '02' => "test02" , '03' => "test03" };
  return \%ret;
}

$hash = test;
while ( ($key, $value) = each %$hash ) {
  print "Key: $key, Value: $value\n"; # 出力 Key: HASH(0x16253ec), Value:
}
</code>
ここ参考にします他.
http://www.rfs.co.jp/sitebuilder/perl/02/10.html#%83%8A%83t%83@%83%8C%83%93%83X%82%CC%8EQ%8F%C6
792あぼーん:あぼーん
あぼーん
793nobodyさん:03/09/10 23:48 ID:???
$hash = test;

$hash = &test;
794772:03/09/11 00:08 ID:???
すいません、自己解決できました。
わてくし、ハッシュを作る時の () と、{} の違いがわかっておりませんです他。
() : ハッシュの作成。
{} : ハッシュへのリファレンスの作成。
sub testでしょっぱなから {} を使ってハッシュへのリファレンスを作成し、
それへののリファレンスを返していたので、リファレンスへのリファレンスになっていました。
それが、期待した動作を得られない原因です他。
<code>
sub test {
  my %ret = ( '01' => "test01" , '02' => "test02" , '03' => "test03" );
  return \%ret;
}
</code>
こうすることで上手くいきます他。
>>774氏、お手数おかけしてすいません。ありがとう御座いました.

参考までに下記のサイトが、ハッシュのリファレンスに関してわかりやすかったです。
http://plaza17.mbn.or.jp/~naotosi/Special/perl/perl3.html#2-2
795nobodyさん:03/09/11 00:16 ID:???
>>782
GD.pm ってのもあるけれども、、、
796nobodyさん:03/09/11 01:00 ID:???
>>781
Shift-JISで組むな。EUC-JPで組め。
797nobodyさん:03/09/11 01:01 ID:???
>>795
まあ、JPEG限定と最初の質問には明記しているが、
拡張性を考えてImage-Magickを使っておく方がいいもんだよ。
# 後で絶対機能追加したくなるって。
798nobodyさん:03/09/11 02:33 ID:???
あぼーんが速くなったな
799nobodyさん:03/09/11 03:14 ID:???
渇を入れてやったから
800あぼーん:あぼーん
あぼーん
801あぼーん:あぼーん
あぼーん
802あぼーん:あぼーん
あぼーん
803あぼーん:あぼーん
あぼーん
804あぼーん:あぼーん
あぼーん
805あぼーん:あぼーん
あぼーん
806あぼーん:あぼーん
あぼーん
807あぼーん:あぼーん
あぼーん
808782:03/09/11 08:35 ID:tAL7swdB
レスありがとうございます。
Win鯖なので、ImageMagickはインストールできないですよね?
GD.pmもパッケージのインストールが必要なのでしょうか?
809nobodyさん:03/09/11 08:52 ID:???
ここはコーディングの・・・いやなんでもない。
810782:03/09/11 10:03 ID:tAL7swdB
>>809
申し訳ないil||li _| ̄|○ il||li
811あぼーん:あぼーん
あぼーん
812nobodyさん:03/09/11 10:55 ID:???
>>781
なんで未だにこういうのがいるのかね。
Shift-JISで書いてわざわざ\エスケープするぐらいならEUC-JPで書いた方がマシ。
813nobodyさん:03/09/11 12:54 ID:cA0CYljH
みなさん初めまして。
ホームページで、金額を表示したい場合などのために、
『引数として渡された数字を、3桁ごとにカンマで区切って、戻り値として返す』
という以下のようなパッケージを作りました。
いちおうは正常に動作しているようなのですが、
渡された引数の、先頭の数字が0だった場合(例014825)のみ、エラーが出てしまいます。
どなたか理由がわかりませんか?

package utility;
######################################
# 数字を3桁づつに区切る
sub sanketa {
my (@arr); my (@kazu); my ($i); my ($NUM);
@arr = reverse (split(//,$_[0]));
while (@arr) {
for (1..3) {
$i = shift(@arr);
push (@kazu,$i);
}
if ($arr[0] ne '') { push (@kazu,',')} ;
}
@kazu = reverse(@kazu);
foreach $i (@kazu) { $NUM .= $i; }
return ($NUM);
@arr=(); @kazu=(); $NUM=();
}
814nobodyさん:03/09/11 13:13 ID:???
>>813
頭に 0 つけると 8進数
815nobodyさん:03/09/11 13:18 ID:iq0GSzN2
<input type="file" name="upload">
みたいな感じでファイル(CSV形式)をアップロードさせようと思っていますが、
スクリプト側でどのようにしてファイルを拾えばいいかわかりません。
ファイル自体を処理するのは大丈夫なんですが、
どのようにファイルを拾えばよいかどなたか御教示いただけませんか?
816782:03/09/11 14:19 ID:tAL7swdB
>>815
 ### データ処理 ###
 binmode(STDIN);# バイナリモード
 $section_line = <STDIN>;# 区切り行
 $section_line =~ s/\r\n//;
 while(<STDIN>)# データ処理
 {
 ### バイナリデータ ###
 if($_ =~ /uploader/)# TAG NAME
 {
 if($_ =~ /filename=""/)
 {
 #ファイルが指定されていない。
 exit;
 }
 ~s/\r\n//;
 ~s/"//g;
 @buf = split(/filename=/, $_);
 $full_path = $buf[@buf - 1];# パス付ファイル名
 $file_name = $full_path;
 &jcode'convert(*file_name, 'euc');# EUC
 @buf = split(/[\\\/]/, $file_name);
 $file_name = $buf[@buf - 1];# ファイル名
 &jcode'convert(*file_name, 'sjis');# Shift-JIS
 @buf = split(/\./, $file_name);
 $file_ext = $buf[@buf - 1];# ファイル拡張子
 $file_ext =~tr /A-Z/a-z/;
817782:03/09/11 14:20 ID:tAL7swdB
>>816のつづき
 $file_kind = "その他";
 $file_kind = "JPEG"if($file_ext eq "jpg");
 $file_kind = "JPEG"if($file_ext eq "jpeg");
 $file_kind = "GIF"if($file_ext eq "gif");
 $file_kind = "MS-WORD"if($file_ext eq "doc");
 $file_kind = "MS-EXCEL"if($file_ext eq "xls");
 $file_kind = "WAVE"if($file_ext eq "wav");
 $file_kind = "ZIP"if($file_ext eq "zip");
 $file_kind = "LZH"if($file_ext eq "lzh");
 $binary_data = '';
 $content_type = <STDIN>;# Content-Type
 $content_type =~ s/\r\n//;
 ($null, $content_type) = split(/\//,$content_type);
 $null = <STDIN>;# 空行
 while(<STDIN>)
 {
 lastif($_ =~ /^$section_line/);# 区切り行でループを終了
 $binary_data .= $_;# バイナリデータ
  }
 
 ### ファイル書込 ###
 open(fp,">$file_name");# オープン
 binmode(fp);# バイナリモード→ファイル
 print fp "$binary_data";# 書込
 close(fp);# クローズ
 
 }
818782:03/09/11 14:21 ID:tAL7swdB
>>817のつづき
 ### テキストデータ ###
 else
 {
 ($null, $name) = split(/name=/,$_);# TAG NAME
 $name =~s /\r\n//;
 $name =~s /"//g;
 $null = <STDIN>;# 空行
 $value = '';
 while(<STDIN>)
 {
 lastif($_ =~ /^$section_line/);# 区切り行でループを終了
 $value .= $_;# VALUE
 }
 $value =~s /\r\n//;
 
 ### タグ別処理 ###
 if($name eq 'title')
 {
 $value = ''if($value eq '');
 $title = $value;
 }
 elsif($name eq 'message')
 {
 $value = ''if($value eq '');
 $message = $value;
 }
 }
 }
819nobodyさん:03/09/11 14:31 ID:???
>>813
そんな面倒なことせんでも・・・
ttp://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
820nobodyさん:03/09/11 14:34 ID:???
sub foo{
 my $hoge = shift;
 my %hoge = %$hoge;
 $aho = $hoge{'args'}->[0];
}

というサブルーチンに関してなのですが、まず、$hogeにはfooを呼び出した時の
1番目の引数が入りますよね?
で、次の二行目の意味がわからないんですが…。
%$hogeってのは、hogeは何かのリファレンスのハッシュで、それをデリファレンス
しているので、その実体という事ですよね?
それを自分自身に代入しているということは、リファレンスから実体に変換している
という事でしょうか。でもそもそも%hogeは初期化も値の定義もされてないし…。
一行目の変数$hogeと何か関係があるのでしょうか。

それと最後の行なのですが、hogeが配列で$hoge->[0]という文ならば、
hogeはリファレンスの配列で、その0番目の要素をデリファレンスしている、
つまり$ahoにはその実体が入る、と思うのですが、ここではhogeはハッシュだし…。
ハッシュの[0]ってどういうことでしょうか。

アホな質問をしているかもしれませんが、らくだ本とかで調べてもよく分かりませんでした。
教えて頂けるとありがたいです。
821813:03/09/11 15:06 ID:???
>>814 >>819
乙。
とても参考になりました。
822nobodyさん:03/09/11 15:54 ID:???
>>820
sub foo{ # サブルーチンの定義
 my $hoge = shift; # 第 1 引数をローカル変数 $hoge にコピー。
 my %hoge = %$hoge; # $hoge の名前の付いた HASH をローカル変数 %hoge にコピー
 $aho = $hoge{'args'}->[0]; # %hoge の 'args' というキーに格納されているリストの 0 番目の値を $aho にコピー
}

●実際に値を入れて考えてみる。
&foo('heee'); # と呼び出してみる。

sub foo{ # サブルーチンの定義
 my $hoge = shift; # 第 1 引数 'heee' をローカル変数 $hoge にコピー。
 my %hoge = %$hoge; # $hoge の名前の付いた HASH %heee をローカル変数 %hoge にコピー
 $aho = $hoge{'args'}->[0]; # %hoge(=%heee) の 'args' というキーに格納されているリストの 0 番目の値を $aho にコピー
}

こんな感じ?
添削キボンヌ
823nobodyさん:03/09/11 16:09 ID:???
>>822
ハッシュリファレンス期待してるサブルーチンに引数'heee'って
定数つけて呼んでもエラーだろ。

&foo( \%heee );

てか、元投稿、「らくだ本とかで調べてもよく分かりませんでした。」てのがわからん。
824nobodyさん:03/09/11 16:22 ID:alzf5zjT
ファイルのCRC32値を計算するルーチンを
そのへんの資料を使って、

@CRC32TABLE = ( いつものCRC配列 );

$filename = $ARGV[0];
$crc32 = &crc32($filename);

print "$filename\n$crc32\n";

sub crc32 {
my($char) = 0;
my($crc) = 0xFFFFFFFF;
open(FILE,$_[0]);
binmode(FILE);
while(<FILE>) {
for $char ( unpack("C*", $_) ) {
$crc = $CRC32TABLE[($crc ^ $char) & 0xFF] ^ ($crc >> 8);
}
}
return sprintf("%08X",($crc ^ 0xFFFFFFFF));
}

と書いて、動きはするのですが、計算速度がコマンドラインexeツールとかの
100分の1くらいしか出ません。(´・ω・`)
もちっと高速化するにはどのへんをいじるとイイ感じになるんでしょうか?
825nobodyさん:03/09/11 16:38 ID:???
@INC(ライブラリへのパス)関連の質問なんですが、
use strict でstrict.pmを呼び出すプログラムをperl -c で構文チェックすると
以下のようなエラーがでてしまいます。

Can't locate strict.pm in @INC (@INC contains: [/usr/local/lib/perl5/5.00503]/us
r/local/lib/perl5/5.00503 y /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /u
sr/local/lib/perl5/site_perl/5.005 .)

詳しいことはわからないのですが、環境変数PERL5LIBを設定する必要があるのでしょうか
作成したスクリプトにライブラリの位置を明記しなくても、自動的に読みに行くようにしたいのですが
どのように設定したら良いでしょうか?よろしくおねがいします。
826825:03/09/11 16:46 ID:???
追記:
/usr/local/lib/perl5/ 
の中にCGI.pmやstrict.pmが格納されています
827nobodyさん:03/09/11 17:36 ID:???
>>822
うーんとつまり、fooの第一引数はハッシュへのリファレンスで、
一行目で変数$hogeにそれを代入、二行目でローカルのハッシュ%hogeに
$hogeをデリファレンスした物をハッシュとして、つまり第一引数が参照している
ハッシュの実体を代入する、という事でしょうか。
んで%hogeはリストのハッシュで、$aho=$hoge{'args'}->[0];は、キーargsの要素
であるリストの0番目の実体を$ahoに代入する。
…で合ってるでしょうか。

>>823
リファレンス、デリファレンス、矢印演算子を扱ってる8章のあたりを読みなおして
みたのですが、いまいちわかりませんでした。
他にこの章を読んでおけってのがあれば、言ってくださると助かります。
全部読むのが一番良いんでしょうけど。
828nobodyさん:03/09/11 18:38 ID:???
>>827
まあ、リファレンス、デリファレンスってなれないと難しいよね。
でも、らくだ本は読み物としても面白いから全部読むのがいいと思うよ。
複雑なデータ構造作ったり、そのうちオブジェクト指向やる、ってことになたら必須だし。
まあ、もって歩くには重たいけど。
で、単に要素を参照するだけならレキシカル変数 %hoge にコピーする必要ないよね。
もし %$hoge がでかかったらけっこう無駄だし。

sub foo{
 my $hoge = shift;
 $aho = $hoge->{'args'}[0];
}

これで要素をデリファレンスできるわけだから(※矢印位置)
がんばって。
829nobodyさん:03/09/11 20:38 ID:btBR5eg4
perlチェッカー全く使えないね。
すぐにこれが出るよ↓
Missing right curly or square bracket at ore_sub-politics.cgi line 657, at end of line
syntax error at ●●●.cgi line 657, at EOF
これって、どっか()閉じ忘れだぞ〜って言う事なんでしょ。
それがどこか聞いてんのに…。
もっと性能の良い perlチェッカーか、
対処法を教えて下さい。
830nobodyさん:03/09/11 20:48 ID:???
>>829
ふつー閉じ間違いとかしねーよ。はずかしー奴。
どうせきったねー何も考えてないコーディングやってんだろ。
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
ここでも読んで自分のソースを全部見直してみろ。
これで腹立って過去の自分をたたき殺したくなったならまだ見込みはあるけどな。
831nobodyさん:03/09/11 21:08 ID:???
>>830
おいおい、ちゃんとスタイルに乗っとって書いてても括弧の閉じ間違いぐらい
するだろ。それとも実行する前にいちいち見直すのか?
インタプリタに渡した方が楽だろ?
832nobodyさん:03/09/11 21:09 ID:???
間違えた
乗っとって→則って
833nobodyさん:03/09/11 21:30 ID:???
>>824
String::CRC32.pm

>>825
PERL5LIBに設定。
しかし、なぜそんな所にstrict.pmが入るのか分からん。
834nobodyさん:03/09/11 21:45 ID:???
>>831
俺も閉じ間違いはよくやるが、
どこで閉じ間違えたかを機械に探させるてのはかなり難問だと思う。
良いアルゴリズムがあったら教えてくれ。
835nobodyさん:03/09/11 22:40 ID:???
かっことかっこの間を畳めるエディタとか使う。
左のガッターに+とか記号つくので、比較的どこで閉じ忘れてるか分かりやすいかも。

最大の難点は・・・
そういうエディタ少ない。
836nobodyさん:03/09/11 22:50 ID:???
>>834
そんなルーチン開発するヒマがあるなら、閉じ忘れを防ぐエディタを開発
した方が生産的だと思うが。

俺はviクローンのshowmatchを使ってるからまず閉じ忘れや括弧の対応間違いは
ないが、そこら辺のエディタにはそういう機能はないのか?
837nobodyさん:03/09/11 22:51 ID:???
>>829はKENTのCGIの文法チェッカとか使っていってそうな悪寒がするのは俺だけか?

サクラエディタはイイよ
838あぼーん:あぼーん
あぼーん
839あぼーん:あぼーん
あぼーん
840あぼーん:あぼーん
あぼーん
841あぼーん:あぼーん
あぼーん
842あぼーん:あぼーん
あぼーん
843nobodyさん:03/09/12 00:25 ID:???
なんで透明あぼーんにしないんだろ・・・
844nobodyさん:03/09/12 01:49 ID:???
>>835
それどこにあるの?
845nobodyさん:03/09/12 01:52 ID:B/YanBzt
CGIスクリプトにブラウザでアクセスすると、永遠に
Content-type: text/html Content-type: text/html
Content-type: text/html Content-type: text/html


って表示されるんだけど、何ででしょう?
出力部分は
print "Content-type: text/html", "\n\n";
  for( &load_format($Format) ){
    s/\$cgi_url/$cgi_url/sg;
    s/\$hoge/$hoge/sg;
    print;
  }
exit;
こんな感じなんですが・・・
846nobodyさん:03/09/12 02:02 ID:???
load_formatの中身は?
847nobodyさん:03/09/12 02:03 ID:???
中華、構文エラーにならない?whileマニなので forあんま使ったこと無いから
良くわかんないんだけど、ごめんね。
848845:03/09/12 02:07 ID:???
sub load_format{
  my $file = shift; # $fileはHTMLフォーマットファイル
  open(FMT, $file) || &error('Failed to open $file: $!)');
    $line = join('',<FMT>);
  close(FMT);
  return $line;
}
load_formatの中身です。
どうでしょう?何か悪いところありますか?
849845:03/09/12 02:08 ID:???
>>847
うん、構文エラーにはならないですよ。
850nobodyさん:03/09/12 02:16 ID:???
試してみましたが、上みたいにループはされないけど、もしかして
print "Content-type: text/html", "\n\n";

exit;
この外側でループさせてる? …のならばそれが問題かも。
851845:03/09/12 02:19 ID:???
>>850
いや、外側でループさせてないですね。

あーもう全然ワカンナイ。
もしかして全く違う部分なのかなぁ。
852nobodyさん:03/09/12 02:22 ID:???
print文をばらまけ
853nobodyさん:03/09/12 02:22 ID:???
>>851
すみません、お役に立てなくてΣ(´△`;
854845:03/09/12 02:28 ID:???
いえいえ。どうもありがとう。
855845:03/09/12 03:13 ID:???
上記の件の報告。
conf.iniっていうファイルをスクリプトの最初でrequireしてたんだけど、
confではなくConfになっていますた。
実際は全小文字のファイル名。
でも、なんでContent...が無限に出るのさっぱりワカランよ。
856nobodyさん:03/09/12 04:06 ID:???
>>847
for()の中にセミコロン( ; )がなかった場合、Perlはforをforeachと解釈します。
この場合、スカラー値なので、

for(load_format($Format)){
 ...処理
}

は、

{
 local($_);
 $_ = load_format($Format);
 ...処理
}

の短縮形のように使われることがあります。s///とか変数名が省略できて便利だから
という理由。LarryらしいっちゃLarryらしい仕様。

>>845
コード自体に問題はないから、その外側に問題があるんだと思う。
というか、普通requireに存在しないファイルを入れたらコンパイルエラーが返ると思う
んだが、Windows環境かなにか?
そうでないとすれば、そもそも問題視してるファイルが違うという可能性も。
857nobodyさん:03/09/12 04:43 ID:???
>>848
errorの中身は?
858あぼーん:あぼーん
あぼーん
859あぼーん:あぼーん
あぼーん
860あぼーん:あぼーん
あぼーん
861あぼーん:あぼーん
あぼーん
862あぼーん:あぼーん
あぼーん
863あぼーん:あぼーん
あぼーん
864あぼーん:あぼーん
あぼーん
865nobodyさん:03/09/12 06:29 ID:???
なぁコピペヲタクよ。勉強してんのか?
今のままなら、なーんも進歩せん糞人間だな。
ちったぁレベル上げろよ。
866nobodyさん:03/09/12 06:34 ID:???
>>865
ギャラリーの存在を意識させてどうする。
867nobodyさん:03/09/12 06:35 ID:???
せめてAA自作にしろよ(w
868nobodyさん:03/09/12 06:44 ID:???
>>866
削除依頼をしているだけでも十分意識させていると思うよ。
869nobodyさん:03/09/12 07:35 ID:???
次の質問をどうぞ↓
870nobodyさん:03/09/12 07:41 ID:???
Perlってどこで売られているの?
871nobodyさん:03/09/12 09:48 ID:SXvUVZeg
宝石売場
872nobodyさん:03/09/12 10:29 ID:???
>>820の質問をしたものです。追加の質問をさせてください。

sub foo{
 my $hoge = shift;
 my %hoge = %$hoge;
 $aho = Jcode->new($hoge{'args'}->[0], 'jis')->euc;
 print FH $aho . "\n";
}

このように、Jcode.pmを使って、jisの文字列をeucに変換してファイルに出力したいのですが、
ファイルを開いてみると、sjisのファイルだと言われ、さらに文字化けしています。
print $hoge{'args'}->[0];してみると、文字列が表示されるので、
$hoge{'args'}->[0]は文字列へのデリファレンス、つまりeucへの変換の部分は
合ってるのではないかと思うのですが…。
どこが間違ってるのでしょうか。

Jcodeのマニュアルです
http://perldoc.jp/docs/modules/Jcode-0.82/Jcode.pod
873nobodyさん:03/09/12 11:07 ID:b/GH9I9g
>>872
問題ないけど。
元コードを jis って明示してるけど間違いない?
874nobodyさん:03/09/12 11:41 ID:???
getcodeしてきました。JIS(ISO-2022-JP)で間違いありません。
875nobodyさん:03/09/12 11:47 ID:???
あと、関係ないかもしれませんが、

$aha = foofoo($aho);
print $aha;

sub foofoo{
 return $_;
}

というのを追加しても、何も表示されませんでした。
やっぱりJcodeの部分に問題があるんでしょうか。
でもそれだとprint $aha;で文字化けした文字列が表示されてもいいような…。
876nobodyさん:03/09/12 12:01 ID:???
>>875
return $_[0];
じゃねえの?
てか、これで何調べてるのかわからんけど。
877nobodyさん:03/09/12 12:31 ID:???
>>876
直したら正常に表示されました。
けど、$ahoには文字列の実体が入ってるんですよね?
つまりfoofoo("hogehoge");とfoofoo($aho);は同じなので、$_と書いたのですが…。
878nobodyさん:03/09/12 12:52 ID:???
>>877
言ってることがわかりません。
サブルーチンは引数を何個だろうが @_ という配列で受け取ります。
$_ ってどっから来たの?
もちっと落ち着いて勉強したら?
879nobodyさん:03/09/12 13:32 ID:???
>>877
あれれ、そうでしたか。
考え違いをしてました。済みません…。
で、なぜに>>872は化けるのでしょうか…。
880nobodyさん:03/09/12 13:55 ID:???
>>879
知らん。
以下jisでスクリプト保存してコンソールで実行。
hoge.datには「それ」がEUCで保存された。化けません。
RedHat 7.3
This is perl, v5.6.1 built for i386-linux
なので再現しない以上わかりません。
---
use strict;
use Jcode;

my $hoge = {
   kore => ['これ', 1 ],
   sore => ['それ', 2 ],
   are => ['あれ', 3 ],
   dore => ['どれ', 4 ],
};
open FH, ">hoge.dat";
&foo($hoge);
close FH;

sub foo{
   my $hoge = shift;
   my %hoge = %$hoge;
   my $aho = Jcode->new($hoge{'sore'}->[0], 'jis')->euc;
   print FH "$aho" . "\n";
}
---
インデントは全角×3
881nobodyさん:03/09/12 14:17 ID:???
Perlのバージョンは?
882あぼーん:あぼーん
あぼーん
883あぼーん:あぼーん
あぼーん
884あぼーん:あぼーん
あぼーん
885あぼーん:あぼーん
あぼーん
886nobodyさん:03/09/12 15:36 ID:???
割り込んでみる
887あぼーん:あぼーん
あぼーん
888あぼーん:あぼーん
あぼーん
889あぼーん:あぼーん
あぼーん
890nobodyさん:03/09/12 15:45 ID:???
5.6.1です。
print getcode($aho);
とすると、eucと表示されてるのに、出力されたファイルをテキストエディタで開くと
sjisと認識される上、文字化けてます。
$event{'args'}->[0]が'ほげ'であった場合、ファイルには'、ロ、イ'と出力されています。
なんでできないんだろう…。
891nobodyさん:03/09/12 15:50 ID:???
>>890
??
それで正しいよ
、ロ、イ <- 半角カナも“、”という記号も文字として存在するんだから
テキストエディタがSJISと判断してもしかたがないんじゃ?
EUCとしてひらけばよし
892nobodyさん:03/09/12 15:50 ID:???
>>890
> 出力されたファイルをテキストエディタで開くと
> sjisと認識される上、文字化けてます。

これってさ Perl のコーディングがどうこうじゃなくて、
エディタの問題でしょ?

エディタでファイル開いたときに文字コードの判別が
うまくいかずにデフォルトのsjisでオープン。
EUCで書かれている文字はもちろん文字化け
893nobodyさん:03/09/12 16:16 ID:???
まさかエディタ==Windowsメモ帳ってオチじゃないだろうな。
894nobodyさん:03/09/12 16:24 ID:???
マジっすか。
xyzzyを使ってるんで、文字コードは自動認識してくれると思うんですが…。
コーディング自体はあってるんですか…。
895nobodyさん:03/09/12 18:18 ID:???
>>894
なんだよそれ、
明示的にEUCで開く、ってこともしないで聞いてたのかよ。
だから最初に「問題ない」って言ってるじゃんよ。
896nobodyさん:03/09/12 18:23 ID:???
質問です。

掲示板への書き込み時にホスト名が引けない人が書き込みができないように
規制をしています。
その中で一部の人だけ、書き込みができるように設定しています。

@ok_people=('xxx.xxx.xxx','xx.xx.xxx'); #書き込みOKな人のIPアドレス

foreach(@ok_people){
unless($remote_addr=~ /^$_/){
unless($remote_host){ print "ホスト名引けないエラー"; }
}
}

なぜかこれでは書き込みOKな人もはじかれます。なぜでしょうか?

また、もっとスマートな書き方があるように思うのですが、うつくしい書き方が
あったら、教えて頂ければと思います。

よろしくお願いします。
897nobodyさん:03/09/12 18:38 ID:???
ループも自分で展開しておっかけてみればわかるよ
これで動くのは、@ok_people に1つしか登録して無い時だけじゃないか?
898nobodyさん:03/09/12 19:11 ID:???
>>897 さん
今色々試して調べてみました。
やっとわかりました。

1回目はいいけど、2回目に引っ掛かるのですね。
どっかでループをぬける処理を作れば良さそうですが、あまりそういうコーディングは
良くないとどこかで聞いたことがあるような...

もうちょっと頑張ってみます。
ありがとうございました。
899nobodyさん:03/09/12 19:22 ID:???
配列を検索する方法もいくつかあるが、
ハッシュにして一発で持ってくれば
ループもいらんのでは
900lopper:03/09/12 19:23 ID:ygMK1YTV
UDP を受信するスクリプトを書いているのですが、ちょっと質問です。
UDP って基本的にコネクションレスなので「送信元が、どこに宛てて」送信
したか分からないですよね。

UDP でパケットを受信した時に「宛て先」が分かるようには出来ないのでしょうか?
送信元は recv の戻り値で分かるのですが・・・
901896:03/09/12 19:39 ID:???
プロな方はよくハッシュを使いますよねぇ。
でも、ちょっと何とIPアドレスを関連づけたハッシュを作ればいいか...

if (exists($hash{"xxx.xxx.xxx"}))

っぽい気がするんですが、これでできるかなぁ。
902896:03/09/12 19:40 ID:???
プロな方はよくハッシュを使いますよねぇ。
でも、ちょっと何とIPアドレスを関連づけたハッシュを作ればいいか...

if (exists($hash{"xxx.xxx.xxx"}))

っぽい気がするんですが、これでできるかなぁ。
903nobodyさん:03/09/12 19:44 ID:???
$hash{"xxx.xxx.xxx"} = 1
とか良くやるよ。値は何でもいい。
904nobodyさん:03/09/12 20:23 ID:???
%ok_people = map { $_=>1 } @ok_people;

&error unless ( exists $ok_people{$ip} );

こんな感じか。
905nobodyさん:03/09/12 20:28 ID:???
コピペヲタクから返事があった。ちょと嬉しかった(w
ゲ製作技術板 http://pc2.2ch.net/gamedev/ でも逝って、ゲームプログラムとはなんたるかを勉強してこい。

そもそも、ゲームの類は色々な手法のかたまり、アルゴリズムの真骨頂。
いきなりゲームを作る!とかぬかす厨はその奥の深さを噛みしめてこい。
906896:03/09/12 20:56 ID:???
>>903,904
うーん、かなり短くできるのですねぇ。
ちょっと今は理解できないので、本を読んで理解してみます。

本当にありがとうございました。
907896:03/09/12 22:09 ID:???
>>904
やっと意味がわかりました...。

この場合だと、IPアドレスが完全に一致する場合でないとエラーならないようですが、
勉強になりました。

リモートのIPの下3桁をけずれば、いけそうです。
ありがとうございました。
908nobodyさん:03/09/12 23:20 ID:???
マスクつきならちゃんと書いたほうがいいと思うよ
909904:03/09/13 01:25 ID:???
# @ok_people には、許可するIPを示す正規表現を入れる。
# 例)@ok_people = ( '\d+\.\d+\.\d+\.21' );
&error unless ( grep { $ip =~ /$_/ } @ok_people );

TMTOWTDI.
……まあ、俺は一行で済むのが好きなだけなんだが。
910nobodyさん:03/09/13 03:11 ID:???
>>896
先頭一致なら index を使うが吉。

@ok_people = qw(192.168.0. 43.244.);
defined $remote_host or print "ホスト名引けないエラー"
  unless grep index($remote_addr, $_) == 0, @ok_people;
911nobodyさん:03/09/13 07:35 ID:Eo0kRzpR
BBSのログファイルの仕様をどのようにするか迷っています。
ログファイル中ではメッセージ一件を一行で保存するものとします。

・案1 メッセージを古い順にファイルに保存する。
新規メッセージを追加書き込みするとき、ファイルの最後に追加するだけだから高速なはず。
最新メッセージを10件表示したいとき、ファイル後半の10行までファイルを辿っていく必要があるので遅くなる気がする。特にログが巨大になったとき。

・案2 メッセージを新しい順にファイルに保存する。
新規メッセージを追加書き込みするとき、ファイル中の既存のメッセージログを変数とかに一旦格納してから、新メッセージ書き込み、既存メッセージ書き込みをする。ログが巨大になったら処理が重くなる気がする。
最新メッセージを10件表示したいとき、ファイルの先頭の10行を読めばいいから高速なはず。

上記のどちらにしても、書き込み、読み込みのどちらかに負担がかかる気がします。
なにかうまい方法があれば助言お願いします。(定石があったりするのでしょうか。)
912nobodyさん:03/09/13 07:53 ID:f365Tbyt
DB_File(使えればMLDBMかまして)
ハッシュにtieさせて使うので好きなデータを好きなだけ持ってけ
913nobodyさん:03/09/13 08:04 ID:???
俺なら案1をとるけど。なぜなら排他失敗してログが飛ぶ心配がないから。
ファイルが巨大になると読み込みに時間がかかるというが、実際相当でかくならない
限りはその心配はいらんのでは?
なんなら1000件毎にファイルを別に用意するとか。
914911:03/09/13 08:36 ID:Eo0kRzpR
>>912, 913
なるへそ。

912さんのはよくわからないので調べてみます

ありがとっす。
915nobodyさん:03/09/13 08:57 ID:???
>新規メッセージを追加書き込みするとき、ファイルの最後に追加するだけだから高速なはず。
これについては、投稿時のみの事だから、そんなに気にしなくても良いと思うけど。
916nobodyさん:03/09/13 08:58 ID:???
2chみたいに、書き込みが物凄い量なら話は別だが…。
917nobodyさん:03/09/13 09:18 ID:???
>>912に一票。
use Fcntl;できれば、面倒くさいロックも考えなくてすむし、
ログが巨大になっても、データベースへのアクセスにかかる手間はほぼ変わらないし。
ログを直接読まれる可能性も減る。
918nobodyさん:03/09/13 11:14 ID:???
>>917
中途半端な量だとDB使う方が遅くなるけどね…
919nobodyさん:03/09/13 13:21 ID:???
>>917,912
DBMファイル直接ダウンロードできてしまうサーバも多いのは、気にしないの?
ついでに、DBMファイルとの接続は、普通のテキストファイルに比べて、3倍〜10倍の時間がかかるのも気にしないの?
おまけに、1件(テキストファイルなら行)あたりの読込み速度が数倍かかるのも気にしないの?

基本的にDBMファイルは横着なプログラミングに便利な予感。
920nobodyさん:03/09/13 13:28 ID:rYbAvmZJ
$a、$b、$c、$d、$e が2以上の時と指定したいんですが、
$a>=2&&$b>=2&&$c>=2&&$d>=2&&$e>=2
だと長いんで、もう少し短くは出来ないでしょうか?
921nobodyさん:03/09/13 14:11 ID:???
>>911
一定数のレスポンスでログをローテートさせた方がいいよん。

>>920
配列にできないかとか、$a >=2 と $b >= 2 をあらかじめどこかで評価しておくとか、
$dと$eはどっちか一つの評価でいいのかもとか、設計から見直してみる。
922nobodyさん:03/09/13 14:15 ID:???
>>920
unless (int(($a+$b+$c+$d+$e)/2) < 5) { 処理; }
923nobodyさん:03/09/13 14:27 ID:???
>>922
$a=10;
$b=$c=$d=$e=0;

int(($a+$b+$c+$d+$e)/2) == 5;
924nobodyさん:03/09/13 15:53 ID:???
>>920
長くなるけど、エレガントにこんなんとか。

my $func_cheker = sub {
  foreach (@_) { return 0 if not ($_ <= 2); }
  return 1;
};

my $msg;
if ( not &$func_cheker(1, 2, 2, 5, 1, 1, 2) ) {
  $msg = "2 以上の値が混じってま\n";
} else { $msg = "OK\n"; }
print $msg;
925nobodyさん:03/09/13 16:03 ID:???
$a>=2&&$b>=2&&$c>=2&&$d>=2&&$e>=2

これでええやん…
926912:03/09/13 16:15 ID:f365Tbyt
選択支の一つとして出しただけ。
ケースバイケースで使い分けてるよ。
で、読んでるとDBMやたら遅いように感じるけど、データ読み込んでHTML展開するうちのファイルアクセス部分はその何分の一だから、体感的にはそこまでの差は感じないけど、
気にするならTEXTでもいいでしょ。
それも設計に因るでしょうけど。
927nobodyさん:03/09/13 22:27 ID:???
掲示板等のログを更新する場合、
もしかして一旦ファイルを読み込んで閉じ、
その後処理を加えた後で再度上書きモードで開いて書き込まないと駄目なのですか?

オープン→ロック→処理(ログ記事数調節とか)→書き込み→クローズ
と言う流れでやろうとしたのですが無理でした…。
<$logfile だと書き込めないし、
>$logfile だと開いた瞬間ログの内容消えてる(と言うかそもそも読み込まない?)しでなんとも。
928nobodyさん:03/09/13 23:06 ID:???
>927は+<で開く事で自己解決しました。

参考: ttp://www98.sakura.ne.jp/~jun/perl/flock.html
929あぼーん:あぼーん
あぼーん
930あぼーん:あぼーん
あぼーん
931あぼーん:あぼーん
あぼーん
932あぼーん:あぼーん
あぼーん
933あぼーん:あぼーん
あぼーん
934あぼーん:あぼーん
あぼーん
935あぼーん:あぼーん
あぼーん
936あぼーん:あぼーん
あぼーん
937あぼーん:あぼーん
あぼーん
938nobodyさん:03/09/14 10:55 ID:???
DBMで二次元ハッシュ使えるモジュールってある?
939nobodyさん:03/09/14 11:30 ID:???
>>938
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
940(;´Д`) ◆1SanV138VQ :03/09/14 15:17 ID:???
スレッドストッパーの文ってどこかにある?
941nobodyさん:03/09/14 15:31 ID:NTDmuCBE
>>940
ぐぐれ。「書けませんよ」も追加すると吉
942 ◆1SanV138VQ :03/09/14 15:39 ID:???
スレストってどうやって作るんだ?
だいたいは思い浮かんでるんだが、どうもうまくいかない
943nobodyさん:03/09/14 15:42 ID:???
673 名前: 停止しました。。。 :停止 投稿日: 停止
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
944nobodyさん:03/09/14 15:43 ID:???
一つ前のレスの投稿日が「停止」になってたら書き込み処理しない、でいいじゃん
945PHP ◆phpTbz4HqM :03/09/14 16:28 ID:???
>>944
なるほど・・・・・・・・・
946あぼーん:あぼーん
あぼーん
947あぼーん:あぼーん
あぼーん
948あぼーん:あぼーん
あぼーん
949あぼーん:あぼーん
あぼーん
950あぼーん:あぼーん
あぼーん
951あぼーん:あぼーん
あぼーん
952あぼーん:あぼーん
あぼーん
953937:03/09/14 17:36 ID:???
>>946-952
やっぱりコイツバカだ。藁。

以後放置します。スマソ。>住人様
954nobodyさん:03/09/14 17:43 ID:???
>>953
やっぱりも何もそんなこと初めからわかってる
香具師の気が静まるまで黙ってろ
955nobodyさん:03/09/14 18:09 ID:???
>>953
あのな、荒らしのカキコに対してはレスアンカーつけないのが基本
956nobody ◆2chGAUCATE :03/09/14 18:21 ID:???
結構初心者ですけど、
入力した文字を送信して
その文字を表示させるのってどうやってやるの?
入力欄は名前やE-mailを入力する欄と同じに
957nobodyさん:03/09/14 18:57 ID:???
>>956
本を読むか、>>1を読む
958nobodyさん:03/09/14 20:19 ID:???
しかし、内容見ると、洒落にならないかもしれないけど
本トの精神病患者かなにかかもしれなんな。<コピペ荒らし
書き込み時間も引き篭もりっぽいし。
他の言語信者のレベルじゃないよ。これを一緒にしたら他の言語信者に申し訳ない。
959nobodyさん:03/09/14 20:25 ID:???
この馬鹿、なんで暴れ出したんだっけ?
960 :03/09/14 20:27 ID:???
さぁ、、
誰かが過剰にかまったんじゃないの
961nobodyさん:03/09/14 21:51 ID:???
937もしっかりと削除されているw
962nobodyさん:03/09/14 23:00 ID:???
>>958
いや、これは異常すぎるだろう。cronか何かでやってるんだろうよ。
963nobodyさん:03/09/14 23:16 ID:???
>>962
そんな知識があるとは思えない。
964*:03/09/15 00:04 ID:???
>>865 = >>905 = >>958
お前がかまうからつけあがってんだよ。
こんなアホから返事もらって喜んでんじゃねーぞ。
965nobodyさん:03/09/15 00:05 ID:???
尻の穴が生意気な・・
966nobodyさん:03/09/15 00:13 ID:???
幾ら無視しても精神病じゃこの粘着も無理ないな
967nobodyさん:03/09/15 00:16 ID:???
どこが無視してるんだ?
968nobodyさん:03/09/15 02:17 ID:???
ところで、俺は通例>>950を取った奴が次スレを立てるもんだと思ってたが、
今回は、>>950がアレだったので、そういう行動は期待できない訳で。

あれか? かわりに>>960くらいにやってもらうのがいいのか?
969nobodyさん:03/09/15 02:23 ID:???
>>968
なぜまず自分から立てようとしないのか理解に苦しむ。
970nobodyさん:03/09/15 02:23 ID:???
次スレは1ヵ月後に立てる。
971nobodyさん:03/09/15 02:30 ID:???
>>962
ちゃんとセリフも的確に変わってるよ。cronなわけない。

>>959
確か、質問した(つもりだった)けど誰も答えてくれなかった(と思い込んでる)からじゃなかったかな。
日本語が意味不明で誰も質問の意味が分からなかったから答えようがなかった。
元々頭おかしいんだよ彼は。
972nobodyさん:03/09/15 03:11 ID:???
http://pc2.2ch.net/test/read.cgi/php/1063562491/

荒らしに埋められそうな気がしたので自信ないけど新スレたてました。
いちお生存チェックはしてます。

あ、あと荒らしに対するコメントも荒らし行為と見なされるので、
次スレでは荒らしさんは完全黙殺・完全スルー・見なかったこと・でお願いします。
973nobodyさん:03/09/15 03:40 ID:???
もう削除依頼も止めておいた方がいいんじゃないか?
どうもあぼーんになることを喜んでいるみたいだ。
透明削除してもらえるタイミングなら削除依頼、
そうでなければ放置というスタンスはどうか。
974nobodyさん:03/09/15 03:42 ID:???
>あぼーんになること
「あぼーん」という表示になること

「あぼーん」レスが残ってしまうと「荒らせた」という満足感が出るのではないかと。
975nobodyさん:03/09/15 03:48 ID:???
>>973
依頼してすぐに削除されるわけじゃないから透明になることはほとんどないと思う。
削除対象以降へのレスアンカーがあったら透明にはならないんだろ?(ずれるから)

「削除依頼はしない」に同意。
削除依頼することも荒らしの相手をすることになるよ。うざいと思ったら2ch専用ブラウザでも使って自分で削除。
976nobodyさん:03/09/15 03:56 ID:???
>>973-975
http://qb.2ch.net/test/read.cgi/sakud/1062352138/125にレスを書いておいた
板違い議論なので、以降は削除議論板でよろ。
977nobodyさん:03/09/15 03:59 ID:???
依頼を続けるほうに一票
運用板で見かけたけどあまりしつこく繰り返している荒らしは
削除人から規制の依頼が出ることもあるようだし
978nobodyさん:03/09/15 04:10 ID:???
>>977
板違い。>>976へ行け。
979nobodyさん:03/09/15 10:08 ID:???
$url='http://www.google.co.jp/search?q=2ch&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=';
$src='^http://www.google.co.jp/search.*?q=([^&]*).*';
$dst='Google検索「$2」';
$url=~s/$src/$dst/e;

元のURLから"Google検索「2ch」"という文字列に変換したいのですが、
変数$dstの中の$2が変換されずそのまま出力されてしまいます。
うまく$2も変換する方法はありませんか?
980nobodyさん:03/09/15 10:11 ID:???
>>979
$dst="Google検索「$2」;

どうでもいいけど$2はちゃんと値はいってんだろうな?
981nobodyさん:03/09/15 10:11 ID:???
ごめん。
$dst="Google検索「$2」";
982979:03/09/15 10:27 ID:???
>>980
「$1」です。すいません。
983nobodyさん:03/09/15 11:01 ID:???
>>979>>982
あ、読み間違えてた。
そりゃムリだろ。多分。
984nobodyさん:03/09/15 11:11 ID:86NIgzh2
perl で print_hogehoge みたいな関数を定義します。
引数は 0 または 1 個で、0 個のとき標準出力に 1 個のとき引数の持つ名前のファイルに、
同一の内容を書き出します。
print (OUT "hogehoge");
として一緒に処理するためには、STDOUT を OUT に代入する(?)必要がありそうですが、
どうすればよいのでしょうか?
よろしくお願いします。
985984:03/09/15 11:19 ID:86NIgzh2
とりあえず、STDOUT に出力するようにして、引数がある場合には、
open(STDOUT, "@_[0]);
としたら、うまくいきました。
いいのかな?こんなんで。
986984:03/09/15 11:22 ID:86NIgzh2
いや、やっぱうまくいってないっす。
ファイルに書き出したい場合も、標準出力にでてました。
解決法探しています。よろしくお願いします。
987nobodyさん:03/09/15 11:22 ID:???
>>984
sub print_hogehoge {
  my $out = shift || '&STDOUT';
  local *OUT;
  open OUT, '>' . $out or error();
  ...
988nobodyさん:03/09/15 11:42 ID:???
>>956
どこに送信したいのか良くわからんが、

-- HTML
<head><meta http-equiv="content-type" content="text/html; charset=euc-jp"></head>
<body> 
<form action="./cgi-bin/output.cgi" method="POST">
<input name="name" value=""><input name="mail" value=""><input type="submit">
</form>
</body>

-- Script
#!/perl/bin/perl
use CGI;
$cgi = new CGI;
my $name = $cgi->param("name");
my $mail = $cgi->param("mail");
print <<"HTML";
Content-Type: text/html; charset=euc-jp

<head><meta http-equiv="content-type" content="text/html; charset=euc-jp"></head>
<body> 
<dl><dt>名前</dt><dd>$name</dd></dl>
<dl><dt>メール</dt><dd>$mail</dd></dl>
</body>
HTML

これでどうだ?
989984:03/09/15 11:43 ID:86NIgzh2
解決しました。ありがとうございました。
990nobodyさん:03/09/15 12:07 ID:???
>>988 誤爆?
991nobodyさん:03/09/15 12:22 ID:???
>>990
漏れの、2chブラウザのレス番号がずれずれだったらしく、
書き込むまで、>>957-987の書き込みが読めなかったの。
すまんこ。
992nobodyさん:03/09/15 12:30 ID:???
>>979
$dst='\'Google検索「\'.$1.\'」\'';
$url=~s/$src/$dst/ee;
993nobodyさん:03/09/15 12:47 ID:???
組み込み関数のリファレンスはどうやって取得すればよいのでしょうか?

my $print_direct = \print;       # (1)
my $print_wrap  = sub { print(@_); }; # (2)

&$print_direct("test", "\n");      # Not a CODE reference at ...
&$print_wrap("test", "\n");       # OK

やはり、ラップ(2)するのが適当でしょうか?

993 get
994979:03/09/15 14:05 ID:???
>>992
期待通りの結果を得られました。有り難うございます。
995993:03/09/15 15:03 ID:???
ageてみよう。
996nobodyさん:03/09/15 16:05 ID:???
次スレ壊れてない?
997nobodyさん:03/09/15 16:32 ID:???
透明あぼーんで11レスになったけど2chブラウザが検出しないな
998nobodyさん:03/09/15 16:34 ID:???
subject.txtが更新されてないみたいだ
最近たまになるよな
999nobodyさん:03/09/15 17:05 ID:???
>>993
無理にでもエイリアスを使いたいなら、Filter::Simpleでいけると思う。
(使ったことない。。)

なぜ使いたいかが分からないけど。
1000nobodyさん:03/09/15 17:21 ID:???
それはそうと 1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。