"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板
http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html ● 2006/07/21現在の最新版: 5.8.8
● 2006/07/21現在の開発版: 5.9.3
リンク集は
>>2-3 過去スレは
>>4
while() {
echo "
>>1 乙\n";
}
my %hash = ( 乙 => 1);
7 :
デフォルトの名無しさん :2006/07/21(金) 06:35:16
String found where operator expected at
>>5 , near "echo "
>>1 乙\n""
(Do you need to predeclare echo?)
何でいちいち埋めるんかな。そっとしとけよって。
乙一
10 :
デフォルトの名無しさん :2006/07/21(金) 09:33:07
6連乙
11 :
929 :2006/07/21(金) 23:47:17
>>988 >SpTemplate->default_escape('html')
と、言うわけで変更(「SpTemplate->default_escape('html')」or「SpTemplate::default_escape('html')」)
>>989 >ループのデータセットは、配列参照かハッシュ参照なのか。
どっちでもOK
SpTemplate->new('param'=>{'aaa'=>[{'bbb'=>'ccc'},{'ddd'=>'eee'}]});
SpTemplate->new('param'=>{'aaa'=>{'bbb'=>'ccc'});
上記のいずれでも「[%loop name="aaa"%][%name="bbb"%][%/loop%]」(or 「[%local name="aaa"%][%name="bbb"%][%/local%]」)で参照できる。
(が、そこにバグがあったのでさっき修正)
>DBからのレコードセットとかの場合どう対処するの?
これは悩み中。
遅延入力(サブルーチンレファレンスの評価)は問題ないけど、非遅延出力は自動でhttpヘッダつける機能があるので面倒。
(データの全取得後、httpヘッダが書かれているかどうか判断し、なければ追加する機能)
標準出力(or 渡されたFH)への直接出力モード時を実装して、
そのモード時のみhttpヘッダをつけなければ実装は楽だけど、出力結果が出力モードに依存するのはいや。
出力が遅延している以上、入力が遅延してもあんまり意味ないし、どう実装するか考え中。
(httpヘッダを認識する範囲だけバッファして、それ以後は出力モード依存かなぁ)
12 :
デフォルトの名無しさん :2006/07/22(土) 20:37:13
cpan> install Date::Simple CPAN: Storable loaded ok Going to read /root/.cpan/Metadata Database was generated on Fri, 21 Jul 2006 06:29:17 GMT 省略 Removing previously used /root/.cpan/build/Date-Simple-3.02 CPAN.pm: Going to build Y/YV/YVES/Date-Simple-3.02.tar.gz Enabling XS code. If you get errors, run `make distclean' and try again using `perl Makefile.PL noxs'. Checking if your kit is complete... Looks good Writing Makefile for Date::Simple make: don't know how to make 1. Stop /usr/bin/make 1 -- NOT OK Running make test Can't test without successful make Running make install make had returned bad status, install seems impossible ってなって 下記をスクリプト上に定義すれば動く。 use lib '/root/.cpan/build/Date-Simple-3.02/lib' しかし、/usr/local/lib/perl5 配下のディレクトリに自動ではいってくれないかね。 助けておくれ。
>>12 コンパイル段階のmake中にエラー起こしてるな
> /usr/bin/make 1 -- NOT OK
こっちでは再現しないしMakefile中にそれっぽいのが見当たらないのだけれど、
とりあえず書いてある通りにnoxsでやってみたらどう?
/root/.cpan/build/Date-Simple-3.02ディレクトリで
make distclean
perl Makefile.PL noxs
make && make test && make install
14 :
13 :2006/07/22(土) 21:05:29
あ、もう一度ログを読み直して気づいた。多分cpanの初期設定ミスだ。 これやってみてくれ。 cpan> o conf make_arg 多分、 make_arg [1] となると思う。なってたら cpan> o conf make_arg "" で消して cpan> o conf commit で保存しる
15 :
デフォルトの名無しさん :2006/07/22(土) 21:08:55
>>13 Installing /usr/local/lib/perl5/site_perl/5.8.8/Date
でとりあえずインストールできた。
ありがとう。
しかし、毎回これが必要だとしんどいな〜
RedHat8,9 CentOS4系のcpanの時は、こんなことなかったのに。
FreeBSD6.1では、ふむ〜。。。。
>>14 ためしに
cpan>install LWP::Simple
したら、OKだった。
×make_arg 1
↓
○make_arg
だったのか〜
ご教授ありがとう。
こう言っちゃなんだけど頭の弱い人に使える言語じゃないしな。
>>18 誤解されそうなんで言っておくがruby使いのみながみなこんなんだって訳じゃないぞ。
つーかPHP厨の陰謀ってことで。
おまいらもっと現実を見詰めようとは思わないのか? 生え抜きのPerlユーザーにすら見放されてるんだぞ >私が思うに、RubyはPerlの守備範囲を何なくカバーしてしまっているので、 >Rubyが使えるとPerlは要らないんですよね。 >すでにPerlで書かれているプログラムを別にすれば。 >それ以来、Perlはawkと同様に「使えるけれど、大して要らないプログラム」となりました。 >と言いつつ、私はsedやawkは結構使ってますけど。 漏れがタイトルつけるとしたら 「Perl、終わったな」
「Rubyで作っていいですか?」 「Rubyってなに?Perlじゃだめなの?」 「えーと、Rubyってゆーのはオブジェクトしこうのすくあqwsでrftgyふじこl」 「いいからPerlで作ってよ」 「。。。はい」 結論:Perlは終わらない
Perlは大好きだし、ワンライナー書きまくりだし、非常に重宝してるんだけど、 Perlコミュニティの勢いのなさはすごく感じるな。 Perl6が失敗だったんだと思う。 5までのように、「汚いし保守できないけど、とりあえずしたいことがすぐできる言語」 という方向性のままで発展していけばよかったのに、「綺麗さ」「理想」を求める プログラミング業界全体の流れに流されて方向性を見失ってしまったんじゃないかと思う。
世界を見たらPerlだらけ。Rubyなんか物好きが使ってるだけ。
幹が腐りつつあるって感じ。
>>23 Perl6っていつリリースされたの?
知らなかったorz
宣伝にも失敗してるのか だめだこりゃ
同じく知らなかった。嘆いてる風なのからすると悪くなったのか
Rubyが思うように普及しないからって相手をけなすのはどうか。 ↓
Rubyなんてマニアに受けてるだけだろ。って俺も相手(Ruby)をけなしてるか。 まあ、PerlerもRubyけなしてるし、るびきちもPerlをけなしてる感じはするけどな。どっちもどっち。 でもPerlはちょっと古臭くなった感がある。
そうそう。CやC++も古臭すぎて使ってらんねwwww
32 :
799 :2006/07/24(月) 11:43:49
コミュニティの質だけで言語の優劣を語って何の意味があるのか だいたいfailmallocとかいってるが mallocが失敗する状況でできることなんてどうせ何もないんだから それに対していちいちエラートラップする意味がわからん perlは優れている 何が良いってperlクックブックがいい あんなに包括的なプログラミングの解説書は見たことがない いや、あるんだけど日本語ではない CPANに行けばあらゆるジャンルのコードが読み放題 ラクダ本は旅の友に最適 failmallocの記事では最近の若い奴らはmallocが失敗する経験なんて ないだろうから、そういう経験をすべきだなんて書いてあるが それこそperlの晴れの場だろう 誰かが言っていた 「普段疑問が投げかけられないものほど、むしろ疑え」 「例えばそれはCだ」 「Cの中途半端な抽象化で多くの貴重な時間という資源が失われた」 と。 私も提言しよう私たちは以下の言葉を疑ってかからねばならない 「きれいで読みやすいコードは保守しやすくて幸せ」 皆この文意を取り違えている きれいで読みやすいコードがよいのではない コードをきれいで読みやすくする過程でプログラマがする経験や思考がよいのだ 私たちが読みたいのは小学生でも読めるおとぎ話なのか? いいや違う。私たちが読みたいのは掘れば掘るほど雫が溢れて来るマンコなのだ 逆説的だが複雑さこそが効率へ貢献するのだ 読みやすいコードばかりなら能力の低い派遣や新卒にだって読めるだろう だがかれらは「てにをは」を直すことはできるかもしれないがマンコは掘れないだろう それでこの業界は幸せになれるのだろうか 私はそうは思わないのだが。
>>17-32 くだらん好き嫌い問題を議論してないで好きな言語を使ってればいいだろ。
なんで無視できないのかねぇ
面白から。
37 :
799 :2006/07/24(月) 13:52:34
私から提案がある perlはOOPをやめるべきなのである Beyond Javaという本にperlについてこう書かれている 「歴史がありとても興味深い言語だがOOPがキモ過ぎる」 これはとても本質を突いていると思うマンコの 今は猫も杓子もしゃくとりむしもOOPだとわめいている しかしそれが一体どれだけ時間を無駄にしているのか 彼らはあまりに理解していなさ過ぎる パターンだイディオムだと騒ぐのはいいが、お前らコードを 書いているのか?と問いたい 我々はコンサルタントではない。熟慮して設計して、それから やっとコーディングを始めるなんて馬鹿げている テストファースト?なんて下らないんだ。私はエロ画像のurlが手に入れば それでいいのである ファクトリメソッドはこうで・・・ええとここはテンプレートメソッドで、 ああテストのテンプレートも作らなきゃ・・・ などと考えているうちにエロ画像はサーバから消されてしまうのである 断言するが我々は原点に返らねばなるまい テストファーストではない エロファーストである 諸君思い出してみるがいい。あなたは何のためにコードを書くのだ? 顧客とwin-winになるため?世界平和? 全然、違うだろうが!! 私もあなたもプッシーです
「私もあなたもプッシーです」だけ読んだ
Rubyなんて使うな、pythonにしておけ。
>>37 ドラゴンボールの中ではフリーザが好きです。 まで読んだ
phpは使わないがあれはあれでいい言語だと思うわ。 ただ自分が使わないってだけで良い悪いなんてのはないしな。 悪いのがあるとしたら言語のせいにしてソースを汚く書く奴だ。
>>37 おまえそんな長文を投入する勇気が良くあるな
微妙に色々勉強してるのが笑える
「私もあなたもプッシーです」で抜いた
いや、OOP嫌いなら使わなきゃいいじゃん。 CPANモジュールがほとんどOOPに置き換わっているのは お前の考えと異なっている奴のほうが圧倒的に多いという事実を示しているよ。
OOP自体は嫌いじゃないし 他の言語で使う分にはまんざらでもない PerlでOOPってかなり見苦しいと思う
rubyもpythonもperlのいいとこ取りしてるんだからperl6はrubyのOOPを いいとこ取りしてスクリプトの決定版になってほしい。
48 :
799 :2006/07/25(火) 09:54:27
perl6は結局ラリーが実装から降りちゃったのがまずかったんじゃ・・・ ラリーが確か「私の実装能力はもうわかったらデザインに集中 することにする」みたいなこといってたような・・・ つまりラリーが設計のみに集中するようになったはいいが 実装者が実はラリーくらいしかいなかったと
船頭多くして船山に登る
進化の袋小路
そろそろリファクタリングの時期に来てるね
メカはすでに腐り落ちているのを、多数の人力で無理矢理生かしている状態。
ラリーの書いたコード、perlのソースで読んだことあるけど 別に普通だったよ。というか、普通過ぎて、もっと良く書けるだろって感じ。 あと変なマクロの嵐で頭痛くなった。 実装から手を引くのもなんとなく分かる。 ラリーはRubyも勉強したけど、結局Perl6にはあまり取り入れなかった。 しかも、やっぱり自然言語を目指すという変な方向に行っちゃった。 で、いまんとこ実装できるパワーがありそうなのは、鳳タンくらい?
Perlが死んだ今、どの言語を勉強するべきですか?
日本語
Whitespaceオヌヌメ Brainf*ckも楽しいですよ^^
なにその変態言語
まあ、RubyかPythonか。問題は言語仕様より開発コミュニティの 開発パワーの優劣だよなあ。
ruby厨が一人で頑張ってるな。お前等も手伝ってやれよw
流行りだしRubyやPythonにも手をだすけど、身近なスクリプトはPerl、っていう人は普通に多そう あれだ 大学で外国語とるけど普段は日本語 みたいな
ruby厨を装ってPython厨のふりをしたPHP厨を陥れようとしてるAWK厨にみせかけたScheme厨を騙るJavaScript厨だと思い込ませたいTcl/Tk厨必至だなwww
Tcl/Tkが必至ですか。そうですか。
いやCOBOLだろう
64 :
デフォルトの名無しさん :2006/07/26(水) 00:17:53
COBOL舐めんなよ。
いやD言語だr・・・ごめ。僕は嘘をつきました。 JavaかRubyか、マニアックにcrowbarとかもいいかもな。 むしろ国産のcrowbarしかねえだろ。crowbar勉強しよう。みんなでcrowbarだ。サンプル言語だけど。
昨日はSchemeをマスターしました。
明日はプッシーをマスターします。
プッシーってはじめて聞く言語だな どんな言語なの?
うは、しばらくぶりに来てみたら夏休み一色になってるなwww
Pussy BEGIN: OBJ~Sujiman => (i) => (O) ;cupar ("Hello, World") => %DISP <= (O) ;echo () => (null) ;goodbye
ちょいと質問なんだけど、 CPANのサイトに authors/01mailrc.txt.gz modules/02packages.details.txt.gz modules/03modlist.data.gz ってあるじゃん? 誰かこれの作り方知らない? 要はCPANのミラーサイト作ってバージョン管理したいわけなんだけどさ・・・
わらわら
>>72 欲してるのはCPAN::Miniかなぁ?
質問です。 yahoo等の検索エンジンでは、ユーザーから入力された検索ワードを 「分解、オプション解釈」して処理していますが、 この処理を提供するライブラリ等は無いでしょうか?
76 :
デフォルトの名無しさん :2006/07/26(水) 16:07:16
point.log 加藤<>500点<>まぁまぁ\n 石橋<>2380点<>すごい\n 山本<>120点<>ヤバい\n 萩本<>20点<>しょぼい\n と言った形式のログファイルがあります。(ちょっとしたゲームのポイントを格納してます) あるページで名前を入れて送信するとその人の名前と得点、コメントを表示する機能を作りたいのですが 例えば山本さんがまた同じゲームをしたとするとlogファイルへ更に山本さんのデータが追加されてしまい、 名前を入れて送信機能を使うと山本さんの二回分の得点とコメントが表示されてしまいます。 (一番最新のものだけ表示したいのです。) 無理矢理一番最後のものだけ表示する、というやり方なら出来たのですが できれば過去の記録は要らないので消してしまいたいのです。 今回でいくと 『山本<>120点<>ヤバい\n』 の行です。 効率を考えてゲームのポイント送信時にその人の名前をチェック、 point.logに同じ名前があればその行を削除、その後point.logへその人の新しいデータを追加 という処理を行ってみたのですがどうにも上手くいきません。 (実際に自分で書いたものがあるのですが、 ここからではちょっとスペースが足りなかったようです。要望があれば書きます。) 知恵をお貸し頂けると嬉しいです。長文すみません。よろしくお願いします。
>>76 >無理矢理一番最後のものだけ表示する、というやり方なら出来たのですが
ということなら、重複した不要行がファイルのどの位置にあるか
具体的に分かることが可能ですよね。
であれば「一番最後のものだけ表示」した後、不要行の削除処理を行えば
処理効率もよいかと思います。
>>76 point.logがどれだけサイズがでかくなるかはわからないが、
名前をキーに全部データをハッシュに入れてしまえばよいのでは?
見た感じ、コメントの部分は点数を見て判断できそうなのでpoint.logは「名前<>点数」だけでいいような気がするが。
で「名前」をキー。「点数」を値としたハッシュ作れば簡単に出来そうな感じがする。
複数人が同時に要求した場合のことは考えなくていい? あるいはその辺はできてる?
>>76 > point.log
> 加藤<>500点<>まぁまぁ\n
> 石橋<>2380点<>すごい\n
> 山本<>120点<>ヤバい\n
> 萩本<>20点<>しょぼい\n
この変なフォーマットは必須なのか?
なぜこんな異常なことをやってるの?
83 :
デフォルトの名無しさん :2006/07/26(水) 16:45:10
85 :
72 :2006/07/26(水) 16:56:29
>>74 CPAN::Miniって ドキュメントざっとみてみましたが、
CPANから特定の部分のミラーを作るって感じですよね?
具体的には現在ある.cpan/sourcesの下をCPANサイトに仕立てたいのです。
86 :
デフォルトの名無しさん :2006/07/26(水) 16:56:53
DBD::AnyData Ver.0.08 499行目は,コメントアウト(して,SUPER::finishにまかせるように)した方が DBD::AnyData::st->fetchなどでrowを読み切ったときにActive属性がちゃんとリセットされるように 思うのですが,この書き換えでの副作用はあるでしょうか?
>>76 $who ='山本';
open(IN,"<","point.log")
open(OUT,">","point.log.new")
while(<IN>){
next if /^\Q$who\E</;
print OUT;
}
print OUT 山本の最新のデータ
close(IN)
close(OUT)
>>88 Estraierか、、そんなのもありましたね
MeCabはわかち書きで似たようなことが出来るかなーとか…
つかHyperEstraierは--enable-mecabオプションがある。 分かち書きとN-gramは実行時に切り替え可能 やほーの「分解、オプション解釈」がどんなもんだかしらんので 比較はできんが
CPANのモジュールをそのままインストールすると、最新版とその依存関係で入りますが、 install A::B バージョンを指定してインストールすることってできますか? その場合、その昔のバージョンとその時の依存関係は保たれながらインストールされますかね?
>>91 install A::B -> cpan> install A::B
CPANに過去のバージョンがアーカイブされていればインスコはできる。
>>93 それってid以下を指定してやる、
install A/AB/ABCD/Hogehoge-1.20.tar.gz
ってやつ?
perl5.8 apache2.2 mysql5.1 perl-DBD-MySQL-3.0004の環境で SELECT @max_age := MAX(age) FROM data; SELECT * FROM data WHERE age = @max_age を実行すると You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; というエラーが出ます。mysqlクライアントからは正常に結果が表示されます。 1つのステートメントハンドルに結びつけられないためかと思いますが Perl + dbiで複数のSQL文を発行するベターな方法ありませんか?
97 :
デフォルトの名無しさん :2006/07/27(木) 10:44:37
perlからID,PWをform認証しているページのコンテンツを取得するのに
以下のスクリプトを書いていて、そこまではうまくいってるんですが、
ヘッダーを追加して送信する場合、どのようにしたらいいんでしょう?
以下のようなヘッダーを追加する方法を教えてください。
ヘッダー名:HOGE
値:HOGEHOGE
use LWP::UserAgent;
use
HTTP::Request; use
HTTP::Request::Common qw(POST);
# リクエストの生成
my $url = '
https://hoge.jp/~test/cgi-bin/login.cgi ';
my %formdata = ('type' => 'login','ID' => 'ID', 'PW' => 'PW');
my $request = POST($url,[%formdata]);
# UserAgentを生成して処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;
98 :
デフォルトの名無しさん :2006/07/27(木) 11:39:19
>>97 $request->header("HOGE","HOGEHOGE");
>>96 ・ @ はエスケープしたか?
・ 複数のSQL文を連続実行したいならトランザクションか排他を使え。
101 :
96 :2006/07/27(木) 12:53:45
>>100 @はエスケープしました。
トランザクション、排他だとパフォーマンスが劣りますしロジックが冗長的になってしまいます。
MySQL++では
MYSQLPP_EXPORT Result store_next ()
Return next result set, when processing a multi-query.
のような関数があるのですがdbiで同じ事をするのは現時点では不可能なのでしょうか。
102 :
76 :2006/07/27(木) 15:23:05
無事解決することが出来ました! 返信してくださった皆さんありがとうございました。 レス遅れてすみません・・。
結局どういう方法で解決させたの? 報告を受ける側としてはそこが重要
>>101 そんなエラーでないけど・・・
SELECT * FROM data WHERE age = (SELECT MAX(age) FROM data);
いろんなもん実行したいんだったら関数登録しとけばー?
108 :
Perl not Pearl :2006/07/28(金) 00:42:39
4314 4331 … [EOF] のようにデータの入ったファイルからリダイレクトで標準入力 からデータを入力するときに、EOFも取り込まれてしまうの ですが、取り込まれないようにする方法はありますでしょう か?今は以下のように、わざわざ配列からpopしてEOFを 捨てています。 @a = <STDIN>; chomp(@a); pop @a;
>>108 chomp($tre=<STDIN>);
>>108 必要な分だけ渡せばいいものを
「わざわざ」なのはそんな文字付けてる方だよ
配列使うならpopが無難
>>109 >>110 ありがとうございます。
今、ヤフー掲示板のスレッドを、見やすいように、100くらいの投稿
をまとめてダウンロードして、表示させるプログラムを作っているので
すが、いろいろ不可解な問題が発生しています。
不可解な点をひとつずつ質問させてください。
まず一つ目の質問ですけれども、
3つのプログラムで、同じ結果が得られると私が思うプログラム
で結果が異なってしまいます。意図した結果が得られるものと
不可解な結果が得られるものがあります。
(プログラム1) コマンドライン入力: perl yahoo_bbs.pl 出力結果: 4314.html4331.html これは意図通りの結果です。 #!/usr/bin/perl -w use strict; use LWP 5.64; # 必要なLWPクラス(バージョン5.64以降)をすべてロードする。 use Encode; use encoding 'shiftjis'; # 使用しているプラットフォームにあわせてください。 binmode(STDERR, ':raw :encoding(shiftjis)'); # 同上 #my @stock_codes = <STDIN>; #chomp(@stock_codes); my @stock_codes = (4314, 4331); my $stock_code; foreach $stock_code(@stock_codes){ my $output_file = "$stock_code.html"; print $output_file; #print $stock_code; }
(プログラム2) コマンドライン入力: perl yahoo_bbs.pl < yahoo_bbs.txt 出力結果: .html4331 入力ファイル yahoo_bbs.txtの中身: 4314 4331 これは私としては、不可解な結果です。 #!/usr/bin/perl -w use strict; use LWP 5.64; # 必要なLWPクラス(バージョン5.64以降)をすべてロードする。 use Encode; use encoding 'shiftjis'; # 使用しているプラットフォームにあわせてください。 binmode(STDERR, ':raw :encoding(shiftjis)'); # 同上 my @stock_codes = <STDIN>; chomp(@stock_codes); #my @stock_codes = (4314, 4331); my $stock_code; foreach $stock_code(@stock_codes){ my $output_file = "$stock_code.html"; print $output_file; }
(プログラム2) コマンドライン入力: perl yahoo_bbs.pl < yahoo_bbs.txt 出力結果: 4314.html4331.html 入力ファイル yahoo_bbs.txtの中身: 4314 4331 これは意図した通りの結果です。 #!/usr/bin/perl -w #use strict; #use LWP 5.64; # 必要なLWPクラス(バージョン5.64以降)をすべてロードする。 #use Encode; #use encoding 'shiftjis'; # 使用しているプラットフォームにあわせてください。 #binmode(STDERR, ':raw :encoding(shiftjis)'); # 同上 my @stock_codes = <STDIN>; chomp(@stock_codes); #my @stock_codes = (4314, 4331); my $stock_code; foreach $stock_code(@stock_codes){ my $output_file = "$stock_code.html"; print $output_file; }
>>114 は(プログラム2) ではなく(プログラム3)です。
(プログラム2)と(プログラム3)の違いはライブラリ
関係の部分をコメントアウトしているか否かだけです。
>>115 (2)は\x0d をエスケープせずに表示したからカーソルが行頭に戻ってる。
改行コードにまつわる問題を追跡するときは、デバッグ表示に何らかのエスケープを行うこと
encoding ありの場合は $/ と実際の改行が異なるのでchompではうまく処理できない。
$/ を変更するか、s/[\x0d\x0a]+//g を使うこと
#!/usr/bin/perl -w
use encoding 'shiftjis';
sub uriescape($){my $a=shift;$a=~s/(\W)/'%' . unpack('H2', $1)/eg;return $a}
print "IRS=",uriescape($/),"\n";
my @list = <STDIN>;
print "before: ",join(',',map{uriescape $_} @list),"\n";
chomp(@list);
print "after: ",join(',',map{uriescape $_} @list),"\n";
というか、実行時環境に影響されないコードを書きたかったらchompは使うな。 必要ない制御コードは全て入力から取り除くという考え方の方が正しい。
またアホがいるな。つかLWP使うような質問は答えるべきでないな。
以下のXML形式データを、テキストファイルにしたいのですが、 どうすればよいでしょうか。参照urlでもなんでもよいので、知っている人教えて。 この質問ここでいいのかな? <?xml version='1.0' encoding='UTF-8'?> <data> <table name="TBL_COMPANY"> <col>ID</col> <col>NAME</col> <row> <val>0001</val> <val>SANY</val> </row> <row> <val>0002</val> <null/> </row> </table> <table name="TBL_USER"> ..続く </data> ↓ ID,NAME 0001,SANY 0002,
ヒント:夏休みの宿題は自分でやろう!
>>119 XML::Parserでも使っと毛。
つーかXMLは元々テキストファイルだが?
>>120 塚本先生?誰かに聞いていいって言いませんでした?
>>121 調べたんだけど、なんかそれむずかしそ。もう少し調べてみるか。
XML-Simpleってのは、どうでしょうか。あー、xml少し勉強しないとな。
123 :
119 :2006/07/28(金) 15:50:46
XML::Simple使って、valの値は取れるようになったけど、 <val>の他に、 <null/>があって、 どう対応すればいいのかわからない。うーん。
>>123 ここにいる人々はおまえが何をやりたいのか分からない。
>>119 >>123 質問する時はあなたを知らない人にあなたの意思が伝わるようにきちんと説明しましょう。
回答者はエスパーではないです。
>>123 分からんけど、XML解析する前に '<null/>' 削除するとかは?
>>116 >>117 よく意味がわかりませんが、文字コードが原因なのですね。
文字コード超研究 (単行本)
深沢 千尋
でも買って読んでみます。
しかし、こんな簡単なコードでも問題が起きるとは。。。
一応、スパイダリングハックスっていう本のコードをコピーしたの
ですが。。。
>>127 >こんな簡単なコードでも問題が起きる
Perlは元々unix環境で使ってナンボだからな。
Windows環境で5.8以降はいくつか問題がある。
有名なのだとcp932とsjisの違いとか。
130 :
123 :2006/07/28(金) 19:44:37
わかりにくくてスマソ。 <row></row>の間が<val>だけのデータなら、ハッシュ名指定でデータ取ればいいんだけど、 nullデータの時は、<val></val>ではなく、<null/>のようになります。 サンプルデータ。 <row> <val>a</val> <null/> <val>b</val> <null/> <row> これを、csvなり、タブ形式なりで取りたいので、 -- a,,b, -- の様な形式で取得したいと思っています。 ソース抜き出すと、 while(my ($name, $table) = each(%{$tree->{table}})) { for my $val (@{$table->{row}[0]}->{val}){ このようになるのですが、ハッシュ名指定以外で取る方法がわからない。 一行ずつ読んでデータ取ったほうがいいかな。
近頃の質問者は態度もアレなのな
XML::Simple じゃなくて XML::Parser使え。 パース中にタグが登場した時点でイベントハンドラ呼ばれるから、そこで好きなようにデータ構造を構築できる。
>>132 どもです。
内部でタグの変更ですね。XML::Parser。難しそうだけど調べてみます。
敬語が使えない馬鹿が増えたねぇ
スマソと言えば許される2ちゃんねるはもう昔の話。
正直どうでもいい。S/N下がるだけだ
-- 以下、敬語以外禁止となります。 --
大統領! 危険です!! 早く車の方へ!
よろしかったでしょうか?、という確認は日本語文法上正しかったでしょうか?
よろしかったでしょうか? は京都に行ったときによく耳にして違和感を覚えました。 最近では、東京でも聞きます。
よろしかったでしょうか? 京都の人間だからなのかしらないけど、違和感なし。
敬語ってのは時期や地域で重ね方が変わるから、正解はない。 敬語を重ねるのが良い場合も悪い場合もある。
2ちゃんねるで敬語講座でもするおつもりですか?
お皿をお片づけしてもよろしかったでしょうか?といって、 返事をする前に手に取って片付けていくファミレス店員をこの間見た。
146 :
デフォルトの名無しさん :2006/07/29(土) 00:30:01
>>129 >有名なのだとcp932とsjisの違いとか。
それはPerlと関係ねーよ!
つかUNIXでも問題あるっしょ。
Spreadsheet::ParseExcelから読み込んだXLSファイルを Spreadsheet::WriteExcelで、テンプレートとして利用できるものでしょうか。ただの噂? もしご存じでしたら、教えてください。
北海道弁では過去形自体に敬語のニュアンスが含まれるので よろしかったでしょうか?に違和感なし。 「こんばんわ」と同意の「お晩です」という表現があるが 相手によって「お晩でした」と使い分ける。 #ほぼ50代以上限定 言語の話題だし、それもTIMTOWDI
違和感はないのかも知れないが、某全国チェーンの店員のマニュアルとして 全国で同じ言葉を使わせようとするのは違和感あり。
>>146 perl5.5以前というかjcode.plにはなかった問題ってことで。
もう10年ぐらい前になるのか、コンビニで初めて、よろしかったでしょうか、を聞いたときは、 少し頭が混乱していました。 頭の中で、「えっ、えー?」みたいに。 話し方次第では、少し冷たく感じるかも。 さいたまー、です。
152 :
デフォルトの名無しさん :2006/07/29(土) 11:30:25
ざつだんはほかでやれって、おかあさんがゆってた。
ままのゆうことばかりきいていたらじりつできないよ
すみませんが、どなたか教えてください。 ヤフー掲示板の投稿を、一つのHTMLファイルにまとめて、読みたいと 思い、Perlのプログラムを書いているのですが、また問題にぶつかり どこが間違っているのか原因が分かりません。 作業内容は、以下のような感じです。 (1)URL「A」から5つの投稿をゲット(「まとめ読み」できるのは5つの投稿までです。) (2)直前の5つの投稿のURLを調べ、それを次のURL「A」とする。 (3)(1)へ戻る。
このプログラムで次のような不可解な現象が起きてしまい、原因が分かりません。 一回目のループ($i == 1)では、問題がありません。 二回目のループで問題が発生します。 $contentには正しい意図通りのデータが格納されます。 ところが、マッチするはずの $content =~ m?mid=(\d+)"><b>前の5件のメッセージ</b></a>?s; がマッチしません。$contentの内容を出力して調べてもマッチ するはずなのです。 どなたか原因がわかるかた、教えていただけないでしょうか。
前の
>>108 の問題は、おかげさまで一応解決しました。
ありがとうございました。
while ($stock_code = <STDIN>){
chomp($stock_code);
$stock_code =~ s/\r$//;
$stock_code = decode('shiftjis', $stock_code);
159 :
76 :2006/07/29(土) 14:00:40
うわ、またレスが。すみません・・
>>103 >>87 さんのを参考に一旦別のファイルへ保存するというやり方でやらせて貰いました。
元々あまり大きなサイズのlogになる予定は無いのでこれで充分だと判断しました。
>>140 してもよろしかったでしょうか? は文法上はしらんが、言葉としてはおかしい。絶対おかしい。
よろしいでしょうか? が本則で、それが過去形になってる。
これをタメ口に直訳すると「こうやってやったけど、もういいよな?」 ってことだ。
>>160 その直訳おかしい。
つかここで自然言語の話するのはちょっと。
emacsのcperl-modeで.plファイルを その場で実行するにはどうすればよいですか? cperlのドキュメントいろいろ漁ったけど 実行のことだけなぜかみつからない・・・
163 :
デフォルトの名無しさん :2006/07/29(土) 17:30:48
>>162 M-x Compileでも使えばいいんじゃね?
>>160 Would you like some coffee?
166 :
162 :2006/07/29(土) 18:26:48
>>163 それ、やってみたんだけど
makeになっちゃうんだよね
167 :
デフォルトの名無しさん :2006/07/29(土) 18:31:53
168 :
162 :2006/07/29(土) 18:49:24
>>167 すんまそん
.emacsに
(setq compile-command "perl")
て書いたら
M-xしたときにmake -kじゃなくてperlがでるようになりました
で、すいません本当にすみません
最後に教えて下さい
M-xしたときにperlと出すのはいいんだけど
このままじゃいちいち.plファイルを指定しなきゃいけないんです
現在開いている.plファイルが自動的にセットされるようにしたいんですけど
どうすればいいの〜〜
>>168 変数compile-commandを知っているのなら、それのヘルプを見れば
やり方が書いてあるが。
それ以外でも、当該*.plにローカル変数定義を書いておく方法もあるな。
170 :
デフォルトの名無しさん :2006/07/29(土) 19:01:54
>>169 > 変数compile-commandを知っているのなら、それのヘルプを見れば
> やり方が書いてあるが。
elispを知ってる人ばかりだとは限らないような……これくらいパッと見でわかるかな?
>>156 マッチするはずの部分がどうなってるか、その説明だけで分かる奴はいないと思う。
>>172 m?? を m{} に変える。
perldoc perlre に
For reference on how regular expressions are used in matching
operations, plus various examples of the same, see discussions of "m//",
"s///", "qr//" and "??" in "Regexp Quote-Like Operators" in perlop.
とあり、perldoc perlopを見ると
?PATTERN?
This is just like the /pattern/ search,
except that it matches only once between calls to the reset() operator.
This is a useful optimization when you want to see only the
first occurrence of something in each file of a set of files,
for instance. Only ?? patterns local to the current package are reset.
とある。?? は一度マッチしたらreset() を呼ぶまでマッチしないってこと。
>>171 マッチ演算子の問題だから、その説明だけでわかる奴(
>>164 等)にはわかる。
ネタと判断してスルーした奴も多い気がする。
自分の場合は、不可解な現象というからには
@array = ($a=0,++$a,++$a,++$a,$a++,$a++,$a++);
print join(',',@array),"\n"; # 6,6,6,3,4,5 になる.
程度の不可解さ(?)は欲しいと思った程度。
6666345って、なんじゃそりゃぁあ????
ごにょごにょした後の結果を返すものは値を返すタイミングが後回しになるって事???
#include <stdio.h> int main() { int x; x = 0; printf("%d%d%d%d%d%d%d\n", x=0, ++x, ++x, ++x, x++, x++, x++); return 0; } をやってみた。 0654210 何じゃそりゃぁぁぁああ???
>>175 みて思い出した。
検証したくて、
my $i ;
( print $i = 0 ,
print ++$i ,
print $i++ );
print "\n" ;
みたくやって、更にハマッタ若き日の俺w
>>178 そんなんK&RやANSIの規定外なので結果はコンパイラ依存。
perlは処理系が事実上一つしかないので同じ結果にはなるだろうが、
全てのバージョンで同じになるとは思わないほうがいい。
適当なファイルを〜.plにD&Dして、そのファイル名を引数にとりたいのですが、 こういった事は可能でしょうか? もし簡単にできるようでしたら、その方法をご教授ください。
.bat
184 :
164 :2006/07/30(日) 12:09:59
>>175 ?の挙動はグチャミソのお下品コードを書かない人間にとっては、
用途がさっぱり不明だから、ほとんどの人間にとっては蘊蓄にしかならないね。
作者なんかは好んで使ってそうだけど。
>>184 > 作者なんかは好んで使ってそうだけど。
ってことはPerlではこの動作は保証されてるの?
perlは処理系が事実上一つしかないので同じ結果にはなるだろうが、 全てのバージョンで同じになるとは思わないほうがいい。
>>186 たとえばJavaではJLSで明確に規定されてるけど
Perlにもそういう規定があるという可能性はないの?
思いっきり勘違いしてたorz
「?の挙動は」を見落として
>>175 の後半の話かと思ってた
>>181 Win板のCygwinスレの過去ログで見かけた方法。
たぶんPerlにも応用可能
977 :973 :03/05/04 07:30 ID:nJ187ml8
>>976 自分で質問しておいてなんですができました。
WSHの.jsファイルではドラッグドロップできるので
レジストリの設定をまねします。
[HKEY_CLASSES_ROOT\JSFile\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
を書き出して、JSFileをBashScriptに置換して結合
[HKEY_CLASSES_ROOT\.sh]
@="BashScript"
[HKEY_CLASSES_ROOT\BashScript\shell\exec\command]
@="cmd.exe /K \"D:\\cygwin\\bin\\bash.exe --login -i \"%1\" %* \""
といった感じ、ここには要点しか書いてないので、
自己責任でお願いします。
右クリック→送るでGNU Makeとかできるのでかなり楽できそう。
前々スレ(24箱目)の680と同じく、定数を設定するファイルを分離、requireして利用しようとしています。 前々スレでは680への返答としてconstantが紹介されていたのですが、 単純にconstantを使って定数を設定しても他のファイルで利用できませんでした。 使い方が間違っているんだと思うのですが、正しい使い方を教えてもらえないでしょうか。 今はこんな感じです。 ファイル1(ファイル名 test.pl) use constant PI => 3.14; 1; ファイル2 use constant; require 'test.pl'; print PI, "\n";
pl2batの存在を知らないやつもいるのか。
>>191 use strictしような。
定数はコンパイル時に定義されていないとダメ。
BEGIN{ require 'test.pl' }
193 :
191 :2006/07/30(日) 16:24:24
>>192 ありがとうございます。
コンパイル時…ですか。いままで意識したこともありませんでした。
一応、格好つけで use strict はしています。
htmlのインデント整形してくれるモジュールって、どっかに落ちてないでしょうか? CGIモジュールの出力だけなら、Prettyで整形されますが、HTML::Templateと組み合わせると、インデントが崩れます。 なので、出来上がったHTMLを食わせると整形して出力してくれるようなモジュールがあると便利なんですが。 HTML::Parser使えば書けそうですが、誰でも考えそうな要求なんで、あれば既存のモジュールで楽したい。
済みません。 また文字コード関係の問題ではまっております。 似たような問題ばかりで申し訳ないですが、どなたか教えてください。 #!/usr/bin/perl -w use Encode; use encoding 'shiftjis'; binmode(STDERR, ':raw :encoding(shiftjis)'); open(IN, '<in.txt') || die "cannot open: $!\n"; open(OUT, ">out.txt") || die "cannot open: $!\n"; while(<IN>){ print OUT $_; } close(IN) || die "cannot close: $!\n"; print OUT "日本語\n"; close(OUT) || die "cannot close: $!\n";
文字コードが固定の場合は、use open を使うと楽。 #!/usr/bin/perl -w use Encode; use encoding 'shiftjis'; use open IO => ':encoding(shiftjis)'; # IOをshiftjis に設定 use open ':std'; # 標準入出力も、それで設定。 open(IN, '<in.txt') || die "cannot open: $!\n"; open(OUT, ">out.txt") || die "cannot open: $!\n"; while(<IN>){ print OUT $_; } close(IN) || die "cannot close: $!\n"; print OUT "日本語\n"; close(OUT) || die "cannot close: $!\n";
入力ファイルの「in.txt」の内容は、 "日本語\n" です。
それで、問題なんですが、出力ファイルの「out.txt」で 文字化けが発生します。 while(<IN>){ print OUT $_; } で出力するとShift Jisで出力され問題ないのですが、 print OUT "日本語\n"; で出力すると文字コードがUTF-8で出力されるようです。 (秀丸で確かめました。) どうすればいいのかよく分かりません。 Spidering Hacksの日本語訳版の付録には、 出力ファイルをオープンする際、 open(OUT, '>:encoding(shiftjis)', ">out.txt") || die "cannot open: $!\n"; と記述すれば、シフトJISで出力されると書いてありますが、エラーに なってしまいます。 使っているOSはWindows XP 使っているPerlはActive Perl 使っているエディタは秀丸エディタ です。
199 :
196 :2006/07/30(日) 18:22:07
この場合は use Encodeがいらないな。
200 :
196 :2006/07/30(日) 18:23:00
おっと、割り込んじゃった? それとも >196 の方法でもだめ?
>>196 >>199 ありがとうございます!
use open IO => ':encoding(shiftjis)'; # IOをshiftjis に設定
use open ':std'; # 標準入出力も、それで設定。
を付け加えたらうまくいきました。
理由はわかりませんが。。。
やっぱり体系的にPerlの使い方を調べないとすぐに文字コードの
問題でトラブってしまうようでPerlって大変ですね。
変な質問ですが、なぜみなさんはPerlを使われているのですか?
Perlは簡単で強力、人気がある、というイメージで使い始めたの
ですが、JAVAを勉強したほうがいいのではないかと思い始めました。
本をちらっと読んでみても、Javaはすっきりしていて、Perlのような
あやしげな感じがしなかったです。
Perl::IO についてはweb上に丁寧な日本語解説サイトがあるから、その程度であきらめるのはもったいないかな。 とっつきにくいけど、仕組みがわれば難しいもんじゃない。 Perlが歴史的にごちゃごちゃした仕様になっているのは確かだが。
キミはきちっとした正しい日本語ばかりのNHKを見続ければいいと思うよ^^
>>201 うん、JAVAに移行すべきだと思うよ。Perlはもう忘れて、すぐにJAVAに移行しよう。
>>150 いや、バージョンや言語によらずUnicodeとの変換で起こる問題でしょ。
Jcodeは2.0でUnicodeを使うようになったから問題が出やすくなったというのはあるかもしれないけれど。
206 :
デフォルトの名無しさん :2006/07/30(日) 19:26:17
連想配列の要素を配列にして使いたいのですが、 その配列へのpushや配列の大きさを読めなくて困っています。 今のところ↓のようなプログラムなのですが、 my %hoge; $hoge{'date'}=1; $hoge{'scadule'}[0]='are'; $hoge{'scadule'}[1]='kore'; print "$hoge{'date'}\n"; for(my $count; $count<2; $count++){ print "$hoge{'scadule'}[$count]\n"; } 'are'や'kore'を代入している部分をpushに、forで回している部分をforeach などにしたいのですが、@hoge{'scadule'}と書くと怒られてしまいます。 このような場合、どう書くものなのか教えてください。
push(@{$hoge{'scadule'}}, 'are');
foreach (@{$hoge{'scadule'}}) { ... }
scadule
schedule
211 :
206 :2006/07/30(日) 19:42:03
212 :
デフォルトの名無しさん :2006/07/30(日) 23:30:32
すいません、Perlのプログラムで質問なのですが 現在CSVファイルから1行ずつデータを取得し編集を行い 別ファイルに吐き出すということを行っているのですが 1セル内に改行コードがある時にデータの配列がずれてしまうので 改行コードから後ろの文章を削除したいのですが、どのように 書けばよいのでしょうか
>>212 それはそのプログラムがどのように書かれているかによります。
214 :
212 :2006/07/30(日) 23:55:33
>>213 レスありがとうございます
今現在どうやればよいのかわからないので
困っていたのですが、カンマ区切りで取得する・・・という所まで
しかできてないのが現状です・・・
-----------------------------------------
# File Read
open FH, "< test.csv" ;
# Read CSV Data
while ( $line = <FH> ) {
push( @line_all , $line );
}
# Close File
close FH;
for ( $i = 0; $i < $#line_all + 1; $i++ ) {
@line_split = split( /\,/, $line_all[$i] );
}
ほげ,"ふ が",はげ あほ,"ばか",しね みたいなファイルのとき 「ふ」だけ拾って「が」は捨てるという意味? line_split($i == 0) = ['ほげ', 'ふ', 'はげ'] line_split($i == 1) = ['あほ', 'ばか', 'しね'] と入るのを期待しているの?
216 :
212 :2006/07/31(月) 00:56:38
>>215 そうです、書き方悪くてすいません
まさしくそれがやりたいことなんです。
よろしければ教えていただけないでしょうか・・・
217 :
デフォルトの名無しさん :2006/07/31(月) 01:34:01
perlで変数名に日本語を使用すると、 Unrecognized character となります。 例えば、「$日本語変数=・・・」 使えるようにする方法ってありますか? 環境はwinXP,ActivePerl v5.8.7です。
>>216 捨てるより連結したほうが楽だが、捨てないとだめか?
改行コードの位置がわかる様に'//' をはさんで連結しているけど、いらなけりゃとればいい。
制限事項として、、クォートはダブルクォート限定で、文字列中にダブルクォートが含まれている場合は対応していない。
open FH, "< test.csv" or die();
my $save = undef;
while ( $line = <FH> ) {
chomp $line;
my @r = $line =~ /(\")/g;
if(@r % 2){
if($save){
push @line_all , "$save//$line";
$save = undef;
}else{
$save = $line;
}
}else{
if($save){
$save .= "//$line";
}else{
push @line_all , $line;
}
}
print join('|', @line_all),"\n";
}
close FH;
ちぇっく用のprint が残ってた。 >print join('|', @line_all),"\n"; はいらない。
221 :
212 :2006/07/31(月) 03:53:26
>>220 こんな夜中に回答いただきありがとうございます
これで一度実施してみたいと思います。
本当に感謝いたします。
質問です。 エラーが出るのはなんでですか? use strict; use Cwd; my $dir = Cwd::getcwd(); opendir DH, $dir or die "$dir:$!"; while (my $file = readdir DH) { next if $file =~ /^\.{1,2}$/; print $file, "\n"; } closedir DH; print "$file\n"; myの使い方が間違っていますか?
>>222 スコープの外に$fileが出てきてるじゃん。
224 :
222 :2006/07/31(月) 22:09:52
>223 $file にディレクトリ下のファイル名を収納して、 次にその名前を他の用途に使いたいのです。 それで、とりあえずprintしてみたのですが。。。
>>222 の場合、while の条件節で $file をレキシカル宣言(my)しているので、while のブロック( {〜} )の
レキシカルスコープ中でしか $file を使えない。(use strict 下では)
もし、ブロックの外で使いたいのなら、while の外で my $file; などと宣言して、while の条件節の my は消しておく。
これが理解できないようなら、use strict はまだ早いかも。
ところで
>>222 の場合、ディレクトリの中の一番最後のファイルしか処理できないけど、それでいいんだよね?
>226
やってみました。
use strictを使うようにって本に書いて有りましたが、
理解してないと拙いですね。
>ところで
>>222 の場合、ディレクトリの中の一番最後のファイルしか処理できないけど、それでいいんだよね?
違います〜!!
すみません、ファイル名のみ(ディレクトリは除く)利用したいのです。
巧い方法を教えて下さい。
>>227 ファイル名をとっておいて後で使いたいのなら、ファイル名を格納する為の配列変数を作って
my @files;
while (my $file = readdir DH) {
next if $file =~ /^\.{1,2}$/;
push @files, $file;
}
とか
my @files = grep { !/^\.{1,2}/ } readdir DH;
とかやれば、後から
for (@files) { print "$_\n"; }
とかできるけど・・・そういう事ではなくて? やりたい事を書いた方が早いかも。
229 :
デフォルトの名無しさん :2006/07/31(月) 22:51:24
>228 ありがとうございます。 pushを使えばよいのですね。 私がやりたかったことは (1)カレントディレクトリから (2)ファイル名のみを配列に格納する ことでした。 しかし、$fileのデータをどうやって配列に入れるか 悩んでいました。 以下はなんでダメなのでしょう? @fileにファイル名が格納されるとおもったのに。。。 use Cwd; my $dir = Cwd::getcwd(); my @file; opendir DH, $dir or die "$dir:$!"; while (@file = readdir DH) { next if @file =~ /^\.{1,2}$/; } closedir DH; print @file; foreach(@file){ print" $_\n"; }
230 :
デフォルトの名無しさん :2006/07/31(月) 22:53:39
そのスクリプト、libraryとして再利用する積もりなければ myなんか使わなければいい。my厨が多くて困る。use strictもいらない。
>>229 opendir DH, $dir or die "$dir:$!";
print join ' ', grep !/^\.{1,2}$/, readdir DH or die "$!";
exit;
かな?
>>231 あ、配列かm(_ _)m深謝
my @files = grep !/^\.{1,2}$/, readdir DH or die "$!";
>>232 う、$!には何も入ってこないのか(呆)
my @files = grep !/^\.{1,2}$/, readdir DH;
print @files ? join ' ', @files : 'No entry...';
>>229 > use Cwd;
>
> my $dir = Cwd::getcwd();
まあ、
my $dir = '.';
でいいんだがな。
> if @file =~ /^\.{1,2}$/; これってどういうつもりなの?
'.'と'..'を除きたいんでしょ
>>230 いまどきはuse strictとuse warningsは必ずつけとけというのが普通じゃないかね。
くだらんバグがかなり門前払いできる。ワンライナーでまでやれとはいわんが。
かといって、意味分からず使ってるとこういう質問が出る。 バグが門前払いできるとしても、そのバグ修正できる程度のスキルがないと意味ないし。
でも use strict の意味やエラーの修正方法もわからないままプログラム組んでも、 そのうちバグを出して質問するに決まってる。結局動かなくて質問するんジャマイカ? であれば use strict させることと、strict によるエラー時の対応方法を まず最初に教えたほうがいい気はする。
strictなんか付けないでもエラーがあれば、エラーの行番号とエラーの中身まで出してくれるからそこを直せばいい。それがスクリプト言語のいいところ。 strict付けると、どうせ再利用しないスクリプトでもグローバル変数に忠告が出たり不要なエラーが出てくる。libraryにするつもりなければ、不要だと思う。
typoに時間かけて悩むのが好きならそれでいいんじゃない?
漏れはタイポはしない。プログラマの基本だ。
一番良いのはPerlを使わn・・・
質問者です。 皆さんありがとう御座います。 勉強になりました。 strictで悩みましたが、それ以前も分かっていない ことが分かりました。 perlは面白いですね!
>>242 たしかにミスをしないのは重要だが、ミスを絶対にしない人間がいないからこそ用意されてるんだろうが。
>>245 242みたいのには何を説明しても無理だよ
ミスをしないためのはずのものが、逆に新たなミスを引き起こしてるのが問題だな。
新たなミスってなんだよw strictの意味分ってねぇだろ
>>242
>>248 放っておいてやれ。もう引っ込みつかないんだろ。
まあでもuse strictは使い切りの作業スクリプトなんかでは使わないときもあるけど
use warningsは毎回使うよな。
PERL5OPT=-w にしてある
俺はstrict warning my 厨だな。 なんかもう条件反射で手が自然に書いてしまう。
252 :
242 :2006/08/01(火) 14:10:06
>>247 は漏れじゃないんだけどさ、
自信ない椰子はstrict, warning使ってればいいんじゃない。
>>248 その意味分かってないヤツが新たなミスを起こすってことだよ
いろいろな書き方ができるからいいんじゃないの。 人の価値観にどうこう言うのやめようや。
>>254 > いろいろな書き方ができるからいいんじゃないの。
> 人の価値観にどうこう言うのやめようや。
「人の価値観にどうこう言うのは許される」という価値観にケチをつける人が出現しました!!
256 :
242 :2006/08/01(火) 15:13:12
「人の価値観にどうこう言うのは許される」という価値観にケチをつける人にケチをつける人が出現しました!!!(以下無限ループはwarning使わず自分で制御汁。)
覚悟の上でやってる奴は好きにしてくれとしか言いようがないが、 新しい人に悪影響を与えるのは良くない
perl -e"$str='「人の価値観にどうこう言うのは許される」という価値観にケチをつける人';" -e"print($str.'が出現しました!!!') while($str=$str.'にケチをつける人');"
>>242 ,247
おまえらがどんなソースを組もうが知ったことじゃないが
間違っても糞なソースをネットワークで公開するなよ!
あと、perl使えますとか公言したりするな。
お前らのせいでPerlerのレベルが不当に評価されちまうから。
>>256 それはちがうだろ。
>>255 は、
「「人の価値観にどうこう言うのは許される」という価値観にケチをつける人にケチをつけ」ているのではなく、
「人の価値観にどうこう言うのやめようや」という言葉で以って、「人の価値観にどうこう言っ」ている露骨な矛盾をやらかしている人にケチをつけているのでしょう。
議論のスタンスにケチつけ始めたら、その話はもう続ける価値がない。
262 :
242 :2006/08/01(火) 15:42:51
>>259 藻前こそなぁー。strict、warning付けっぱなしでwebに
公開してネットワークの負荷を増やさんでくれよー。
263 :
242 :2006/08/01(火) 15:51:52
s/ネットワークの負荷/サーバの負荷/;
鯖の負荷なんてものは誰かの書いたとんでもなく非効率的なコードが そのほとんどを消費してるものだ。
use strict; use warning; でスクリプトが遅くなると勘違いしてる真性の馬鹿がいるな・・・
my いらないとか、sub の中でどうやって変数使ってんだ?w どうみてもスパゲッティです、って感じなのか? 怖ぇw
>>ALL 242は夏厨なので放置しましょう。 262の発言でわかるように242は劣悪なperl/CGI本が大量生産した害虫の一匹なのです。 どう丁寧に説明しても話は平行線で交わることはありません。
ログファイルにウォーニングをバンバン書き出してるのが遅くなってる原因だろ?
つまりはKENTか
>>266 自分に出来ない事は他人も出来ないと思ってるの
君の書いたコードを見たいwwwww
>>271 266は出来ないなんてどこにも書いていない。
おまえがアフォだねと書いてるだけ。
なんだこの不毛な流れ
(#^ω^)ビキビキ…
276 :
デフォルトの名無しさん :2006/08/01(火) 18:03:50
さすがだ
今喜多産業
279 :
242 :2006/08/01(火) 20:58:54
はい3行でね。 libraryで再利用もしない小さなスクリプト書くにもstrictやwarning 使わなきゃ自分のtypoやerrorが発見できない香具師らが、ちょっと テクが上の人に同じことをしろと強要してる流れですよプゲラ
>>242 「俺typoしないもん」って言ってる奴が
さっそく262でtypoしてる状態では何言っても説得力ねーよ、バ〜カw
ようは自分がミスしててもミスと認識してないだけだろ。
242の頭がイタイって流れか
そうそう 242の頭が逝っちゃってるって流れ
>>279 typoしないもんって言って速攻typoするあたり
さすがテクが上の人は違いますね。
感服しました。
242のギャグ最高! 誰もstrictやwarningを使わないとtypoやerrorが発見できないなんて書いてない。 つけた方が効率的に発見・予防できるってだけだよ。 さすがテクが上の人は脳内捏造も半端じゃないですね。
みんなが242のギャグを褒めたのに照れてどっかいっちゃったな。 奥ゆかしい奴だ
Perl6だとデフォルトでstrictがONじゃなかったっけ
そうなんでつか!? Perl6って追ってなかったから知らなかった。 ちょっくらPugsのドキュメント読んでくる
つーかstrictがONでのエラーはそうでないものよりずっと分かりやすいじゃまいか。 初心者が「変数に何も入ってません。インタプリタのバグでしょうか」といってくるより、 「XX行目でコンパイルエラーになってしまいますが、何故ですか」といってくるよりずっと楽だわ。
あああ日本語がシンタクスエラーだった orz
>>288 284が書いている「つけた方が効率的に発見・予防できる」ってことに集約されるな
行きずりで連絡先も聞かないブス女抱くにも体温計やコンドーム 使わなきゃ自分のミスやerrorが回避できない香具師らが、ちょっと テクが上の人に同じことをしろと強要してる流れですよプゲラ
夏ですね☆
俺よりちょっとでもテクが上なら strictやwarningが与えるコンパイル上の制約はプログラミングの効率に何の影響もないはずなんだけどな。 いっそのこと実際にコード書いて貰って証明してもらうか?
行きずりで連絡先も聞く気にならない女抱くにもコンドームやピル 使わなきゃ避妊できない香具師らが、ちょっと テクが上の人に同じことをしろと強要してる流れですよプゲラ
ソケットでの通信しようと、いろいろやっているのですが、思い通りになりません。
スクリプトはちょっと長めなのでアプロダへ上げました。
ttp://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi46645.lzh.html です。
まずserver3.plを待機させ、client.plで接続します。
client.plはSTDINを送信し、応答を受けるだけのものですが、server3.plからの接続応答「Hello!」が一行あるとワンアクション分タイミングがずれて表示されてしまいます。
whileでソケット全てを受信すると、STDINがロックされてしまい、入力が出来なくなります。
そこでclient2.plではforkを使って、STDINとソケットの受信を分けたのですが、こんどはソケットを受信しなくなってしまいました。
forkの親と子を入れ替えたり、スレッドにしてみたりしましたが、STDINがロックされるか、ソケットの受信がなくなるかのどちらかになってしまいます。
よろしくお願いします。
>>296 これ、どうやってソースDLするの?
あとOS、Perlのバージョン,モジュールの使用可否の情報もキボン
298 :
296 :2006/08/01(火) 22:42:12
メンゴDLできた。
299 :
297 :2006/08/01(火) 22:43:02
298カキコミス297デス
>>297 すいません、うっかりしてました。
Win2k SP4、ActivePerl5.8.8
モジュールはインストールしたままのものです。
strict厨じゃなくてmy厨が問題の発端じゃないの?
242=夏VIPPER厨ということですね♪ はい次の方。
行きずりの女だくのにコンドームつけないお前の勇気に感服した ってか避妊以前に病気怖くね?
本当はstrictしたいけど素直になれないツンデレさんが出没しているスレはここですか?
>>304 じょ、じょ〜だんじゃない。
わたしにはstrictなんていらないのよ。本当よっ!
strictしたら負けかな、と思ってる
>>296 > client.plはSTDINを送信し、応答を受けるだけのものですが、server3.plからの接続応答「Hello!」が一行あるとワンアクション分タイミングがずれて表示されてしまいます。
connect時にサーバが送ったメッセージを受信していないからだ。
このスレは昔から良識な人が多いのでこんなこと書くと、
「放置しろよ」とか思われてしまうかもしれないが、
最近、このスレも煽りが増えたね('A`)
いや、
>>242 のことではなくて。
事あるごとに、他人を必要以上に小馬鹿にしたがる煽りが。
同じ日本人であると思うと見ていて恥ずかしい。
>>307 それで、受信を何行でも受け取れるようにclient2.plでforkを使って送信と受信を分けようしたんですが、上手くいかないんです。
313 :
デフォルトの名無しさん :2006/08/02(水) 03:01:03
>>312 ちょっと書いてみた。IO::Socket使っているからIO::Selectなんか使って……
use IO::Select;
してから、メインループのところを
my $select = IO::Select->new();
$select->add(\*STDIN, $socket);
while(my @ready = $select->can_read) {
foreach my $fh (@ready) {
if ($fh == \*STDIN) {
# 文字列を送信
chomp($_ =<>);
print $socket "$_\n";
$socket->flush();
} else {
# 文字列を受信
if ($buf = <$socket>) {
chomp $buf;
print "$buf\n";
}
}
}
}
て感じで。
>>296 まずchat-client.plだけど、この実装はそもそも致命的な欠陥がある。
一行読み取るところで、入力がなかった場合そこでブロックしてしまうために、
サーバから別のクライアントの発言を受け取ることが出来ない。
chat-client2.plはケアレスミスが二つあるのでまず指摘。
サーバからの受信を表示する側の処理で、select $cosket;になっているのと、
whileで回さないといけないのに一行読み込んだら終わってしまっている。
しかし、これを修正してもどうやらActivePerlの制限のために動かないようだ。
# cygwinでは動作確認
本来Windowsにはforkはない。なのでfork関数はActivePerlがエミュレーション
しているのだけれど、その実装上の制約を踏んでしまっている気がする。
ttp://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/Pod/perlfork.html#bugs print $socket $_;をコメントアウトするとブロックしない辺り怪しい。
対応策は既に回答が出てしまったので割愛。ちなみにforkを使ってやるなら、
ソケットからの読み取りをブロックしないようにすれば大丈夫かな?
その場合は、ソケットへの読み書き部に排他制御もするべきだろうね。
server側の処理はPOEで簡単に書けたけど、 client側が思ったようにうごかねぇ。 POE::Wheel::ReadLineでいい感じになるよって書こうかと思ったけど WinのせいなのかActivePerlがいけないのかわからんけどPOSIXのマクロがねぇって怒りだしてうごかねぇな。。。 おまけに普通にPOE::Wheel::ReadWriteでInputHandleにSTDINを登録してもWinはなぜかうごかねぇし…。 どうなってんだこりゃ?
Linux,BSDで動くclient.plは書けたけどWinで動くクライアントがかけねぇ!! 296には悪いが練る。
ぼくはまちやさんで今はやってるはてなのXSS aho.cgi?a=b&page=0"><script>alert("aho")</script>の類は kentさんのスクリプトに試したら起きなかった やはりkentさんはすごいね
>>313 こちらでは受信が出来なくなってしまいました。
>>314 ほんとだ、凄くつまらないミスしてますorz
Windowsだから希望したように動かないと思っていいということでしょうか?
>>316 遅くまでありがとうございます。
やはりWindowsだからだめなんでしょうか。
Perlでこういった処理というのは、あまり使われないのでしょうか?
今回はチャットの形で挑戦したのですが、特定の処理を別のマシンにまるなげするとか、うまくやればリモート操作なども出来そうなので、いろいろ弄ってみたかったです・・・・。
何が問題か未だにわかっていませんが、別の方法で、例えばTkで出来ないか、試してみます。
>>318 > Perlでこういった処理というのは、あまり使われないのでしょうか?
いや、ありとあらゆるプロトコルのサーバもクライアントもサーバントも
プロクシも存在する。
Windowsって難儀やねえ。
>>318 Perl,Python,RubyはunixクローンOS育ちで後でWindowsに移植されていて、
移植するに当たってOSの差異ってのはPOSIXで吸収したりWin用の特殊な処理を組み込んだりするのよ。
で、WinにおけるPerlの移植の完成度はWinが実装している
POSIXの出来具合に依存するとこもあるっす。
だからPerlでこういう処理が出来ないってより、ActivePerl+Winという組み合わせに
手間どってます(linux上で動くのはすぐ作れたわけで)。
http://ja.wikipedia.org/wiki/POSIX って、WikipediaみるとWin2kとXPでまた違うのか…。
もうちょっと調べてみる ・ω・)ノ
なんだか理解の範囲を超えてる話題になってきちゃってます。 いい機会なので、ヤフオクで安いPCでも仕入れて、LInuxインスコしてみようかな。 お金ないけどorz
322 :
デフォルトの名無しさん :2006/08/02(水) 16:15:06
誰か、お願いします1つだけ教えてください。
http://news18.2ch.net/mnewsplus っていうのを読み込んで mnewsplus の部分だけ欲しいです。
/より後を切り出すためにはどうすればいいでしょうか?
2chのルートディレクトリはほとんど、1つ下のディレクトリにあるみたいなので
ディレクトリ名だけ欲しい状況です。
おねがいします。
323 :
デフォルトの名無しさん :2006/08/02(水) 16:21:05
plをexeにコンパイルしたいのですが 本家でperl dev kit なるものがダウソしたのですが、ライセンスKEY買えってでて、どうやって買うのかもわからずできませんでした。 他に方法ないでしょうか;
PARとか コンパイルと言えるかどうかは知らないけど
perlcc
>>325 1. と 2. じゃ意味が違うようだけど、質問の回答ならどっちでもいいのかな
>>324 面白そうなので、調べてます。
ちなみに、Tkでやってもロックされるのは同じでした。
use Tk;
use Encode;
use IO::Socket;
$socket = IO::Socket::INET -> new( PeerAddr=>'192.168.11.2', PeerPort=>5000, Proto=>'tcp') || die "接続失敗。 $!\n";
if ( $pid = fork() ) {
select $socket; $| = 1; select STDOUT;
while (1) {
$top = MainWindow -> new;
$top -> optionAdd( '*font'=>['MS ゴシック', 12] );
$top -> focusForce;
$entMsg = $top -> Entry( -width=>40 ) -> pack( -side=>'left', -expand=>1, -fill=>'both' );
$entMsg -> bind( '<Return>', sub {
my $msg = encode( 'sjis', $entMsg->get ) || return;
$entMsg -> delete( 0, 'end');
print "送信 > $msg\n";
print $socket "$msg\n";
} );
MainLoop();
}
} elsif ( defined $pid ) {
select $socket; $| = 1; select STDOUT;
while (<$socket>) { print }
} else {
print 'fork失敗。';
exit;
}
題意を満たすだけなら。 ($result) = $url =~m|/(.+?)$|;
332 :
331 :2006/08/02(水) 18:12:47
あれ、うまくいかないや。最短一致でいけるとおもったのに。
>>331 最初に見つけた'/'から行末までいっておしまいか。
マッチの終了位置が最短にするようにはするけど
開始位置が最短になるように移動することはしないのね。
335 :
326 :2006/08/02(水) 18:27:29
誰かコンパイルしておくれ
>>318 Perl 5.6系で実行する、マジお薦め。
5.8系なら print を send に書きかえる。
うろ覚えだけど、そんな感じ。
>>335 perlcc -o yes.exe -e 'while(1){print "yes\n";}'
338 :
297 :2006/08/02(水) 19:07:11
>>336 試しにXPのActivePerlを5.8.8から5.6.1(build638)に入れ替えてみたけど
POEを使った方法やIO::Selectを使った方法を試したけどうまくいかないよ。
sendはsocketを処理する奴で
漏れは296の問題を解決しようとして標準入力がうまく扱えなくて頓挫中。
use File::Basename ; my $ret = basename $url ;
340 :
297 :2006/08/02(水) 19:30:32
341 :
297 :2006/08/02(水) 20:20:30
5.8.8に戻してthreadsを試したけど2つのスレッドが平行しないな。 AのスレッドがSTDINを読みに行く間,Bのスレッドは止まってるよ。 これじゃあスレッドを実装してる意味ねぇじゃん…。 漏れの勝手な結論: Windows + ActivePerlの挙動が変
Windowsではソケットとselectの相性が悪いってことなんですね。 Win32::Socketpairというモジュールでは、syswriteとsysreadを使っているようです。 関係があるか良くわかりませんが、また時間があるときに弄ってみます。
343 :
297 :2006/08/02(水) 22:49:30
>>342 逆っす。
340のリンク先を見てもらうのがいいと思います。
>>343 とりあえずお気に入りに入れました。
英語からっきしダメなんで、時間があるときに解読していきますorz
>>344 340のリンク先は日本語のページだよ?
そのリンク先のフォーラム?の記事が・・・
>>338 こっちだと、Winの処理系にWin98SE 使っているからかな?
-ループ部分
select $socket; $|=1; select STDOUT; $|=1;
if ($pid = fork()) {
while (<STDIN>) {
print $socket $_; # send($socket,$_,0);
}
} elsif (defined $pid) {
while(<$socket>) {
chomp;
print $_,"\n";
}
}
これで動くことは動いた。
POEやIO::Selectは、(ハマりそうだから)確認すらしていないけど。
つーか、ファイルハンドルやソケットのblockingを変更するメソッドあるだろ? あれはWindowsでも動いたと思うぞ。
>>347 XP+ActivePerl5.8.8では動かんな。
>>348 具体的なコード プリーズ
noblockingにするとブーンと……
>>349 POEやIO::Selectをつかってnon-blocking処理してるのを
理解できてないわけだから
>>348 をいくら叩いても何も出てこないよ
352 :
326 :2006/08/03(木) 04:01:05
信頼の絆って大切だねッ!
perl2exeって知ってるか?
Term::Capを使ったサンプルソースのサイトをご存知ないでしょうか 具体的には、DOS窓中で任意の位置に文字をprintしたいのです。 クックブックの内容どおりでは、WindowsXP perl5.8環境では うまくいかず行き詰ってます…
perlコードをexeにするメリットってあるの?
>>357 デメリットの半分くらいはあるんじゃない?
359 :
296 :2006/08/03(木) 19:09:23
こちらの環境では、やはり同じようにロックされてしまいます。
只今
>>359 が完全にロックされました。 セーフティセーフティしますか?
>>356 コマンドプロンプトは端末じゃねぇから
Win上でTerm::Capでほげほげするってのは多分無理じゃね?
あとモジュールの使い方くらい、ここで聞いたりウェブ探さなくても
モジュールのドキュメントにサンプルコード書いてあるべ?
コマンドプロンプト開いて
perldoc Term::Cap
ってしてみ。
つWin32::Console
363 :
347 :2006/08/03(木) 20:38:19
>>349 そっか、余計な事を書いてしまったようで(
>>296 氏にも)失礼した。
98SEの場合、(クライアント側は)5.8系だと print $socket $_; 中でロックするので、そいつだと思った。
もうちょい調べてみるけど、ActivePerlのソース(816/613双方)を見た感じ、ソケット回りはNT/9x系で
共通だから、徒労に終わる予感。
364 :
297 :2006/08/03(木) 21:01:12
>>347 サーバ側は私もすぐにスクリプトを組めました。
socketは問題なくnon-blockingで処理できてます。
で、私が悩んでいるのはclient側の方で、
「標準入力STDINをnon-blockingで扱おう」と
モジュールを使おうとするとPOSIXにマクロがないと言われたり,
select(IO::Select)を使ってもSTDINはうまく扱えなかったり
forkしてみてそれぞれsocketとSTDINを別々のプロセスで処理させてみたり
threadsを使って別々のスレッドでsocketとSTDINを処理させてみたりしてるのですが
なんでかSTDINの読み込みで他のプロセス(若しくはthread)までblockされたりする現象で悩んでます。
わたしも最初はこんなの簡単だろって思ってたかをくくってたのですが
Linux上で組んで動作確認した後にXPで動作させるとclient側だけ
いろんな方法試してもblockされちゃうんですよね。
365 :
296 :2006/08/03(木) 23:11:57
>>361 のレスでふと気になって、サーバーは同じように直接実行して、クライアントはtelnetで接続してみました。
そうすると、受信は出来ますが、送信どころか入力が出来ません。
しかし、一つ気になることがありました。
それは、改行が改行になってないということです。
プロンプトでは\nと\rで行が変わって先頭にカーソルが移動しますが、telnetだと、\nのみでカーソルが真下に移動します。
telnetはめったに使わないので文字コードの扱いをよく知りませんが、改行コードで攻める方法もあるのかもしれない(?)ので、後でやってみます。
366 :
297 :2006/08/04(金) 00:19:50
>>296 サーバーは動くの確認してるからそっちだけでもソースうぷったほうがいい?
367 :
デフォルトの名無しさん :2006/08/04(金) 01:42:43
すいません、Perlプログラムについて質問 させていただきたいのですが、 @Bit = ("31-18",17-8","6","3-0"); @Node = ( "87","1F","0","1" ); @ANS_BIT = ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ); 結果的に作りたいものとして32ビットのデータを作成したく、 ANS_BITの配列に@Bitの配列中にある幅内に@Nodeの 値(16進数→2進数)を入れて @ANS_BIT = ( 0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0, 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1); →[00000010000011100000111110000001] のようなデータを作成したいのですが作れずに 困っております。特に@Bitの中で幅指定が連続であれば 簡単なのでしょうが所々抜けがあったりするので どうすればうまくいくのかがわからない次第です。(空白0) どなたかよい方法ありましたら是非ご教授願えませんでしょうか・・・
よく理解してないのだが、普通に16進->2進やって空白ビットだけ落とすってのは駄目?
>>367 @Bitが変だな。もうちょっと論理的に扱えないものか。
@Bit = ("31-18","17-8","6","3-0");
@Node = ( "87","1F","0","1" );
$val = 0;
for(0 .. $#Bit){
$Bit[$_] =~ /^(?:\d+-)?(\d+)$/ or next; # 右端の位置だけ得てシフトすればいい
$val |= hex($Node[$_]) << $1;
}
$bindata = pack "N", $data;
# この時点で$bindataが求めている形になってるはず。
print unpack "B*", $bindata;
ビットの配列化は適当に。
370 :
367 :2006/08/04(金) 03:03:08
>>368 ,369さん
ありがとうございます!
正直このために5時間以上考えてもうまくいかず
熱出して鼻水だしてやってました・・・これで養生できそうです。
本当にありがとうございます
371 :
デフォルトの名無しさん :2006/08/04(金) 04:00:44
マルチポストすいません。webprog板でも質問したのですが回答頂けなかったのでこちらでも質問させてください。
ttp://joe.ash.jp/pc/netprog/ftp.pl.txt ここにあるFTP転送スクリプトを一定時間サーバーの応答がなければ
実行を止めるというタイムアウト処理をするように書き換えようと思います。
alarm関数でなくselectでタイムアウト処理をしようと思いますが
以下のようにftp_recvを書き換えてみましたがタイムアウト処理が
行われません。どうしたら良いかご教授願います。
sub ftp_recv {
my ($sock) = @_;
my ($buf, $rc, $cont, $msg);
my $rin = '';
my $rout;
my $ftp_timeout = 10.0;
$rc = 0;
vec($rin, fileno $sock, 1) = 1;
die unless select $rout=$rin, undef, undef, $ftp_timeout;
while (chomp($buf=<$sock>)) {
die unless select $rout=$rin, undef, undef, $ftp_timeout;
print "$buf\n";
$buf =~ /^(\d\d\d)([ |-])(.*)/;
$rc = $1; $cont = $2; $msg = $3;
if ($cont ne '-') { last; }
}
return($buf);
}
>>371 質問するときはOS, perlのバージョンを書けってママンに教えてもらわなかったのか?
>>371 selectというのは、、selectでブロックして、
selectを抜けた時にselectの返り血で
タイムアウトか入力があったかを調べるもの
なんだが。
374 :
371 :2006/08/04(金) 11:42:33
>>372 すっかり忘れてました。
OS: Linux 2.6.9-1.667 #1
Perl: v5.8.5
で試してますが将来的にはWindows+Perlでもスクリプトが組めるように
alarm関数は避けて試してます。
>>373 selectって、そういうものだったんですか…
やはり、とりあえずalarm関数でやっていくしかないみたいですねー
有り難うございました。
すっごく基本的な質問で恐縮なんですが、 正規表現の「?」の意味は Active Perl5.8.8とjperl5.005で違うんですか? 入門書にあった下のスクリプトをActive Perl5.8.8で実行したら、 × 一週間でマスターするPerl ○ 一週間半でマスターするPerl って出たんですけど、jperlだと ○ 一週間でマスターするPerl ○ 一週間半でマスターするPerl って出力されました。 ---- @book = ('一週間でマスターするPerl', '一週間半でマスターするPerl'); foreach (@book) { if (/一週間半?/) { print "○ $_\n"; } else { print "× $_\n"; } } ----------- 「?」が直前の文字0個か1個だとしたらActivePerlの出力がおかしいと思うのですが。 尚、OSはWindows2000です。
特殊なのはjperlの方。 マルチバイトとjperlがどういったものなのか理解すればわかる話。 perl5.8.8で同じことしたい場合はソースコードをUTF-8で書くかencodingを使え。 ただしencodingは副作用も大きいからそれがなんなのか、 どこまで影響するのかを理解できないなら使わないほうが身のため。
378 :
347 :2006/08/04(金) 19:29:47
>>364 STDIN処理中の他スレッドブロックは確認できず。
NT系と9x系の違いかな。
perlにブロックしてるような記述が見当たらないので、(見落としでなければ)
VCのライブラリかWinのコンソールシステムでのブロックなのか。
STDINのnon-blockingはかなり難しそうだね。
いっそ、本物の別プロセスを使ってみるとか?
open($pipe,qq/$^X -e "print while <STDIN>" |/); とか
>>365 今回の件と改行コードは関係無いよ。
<STDIN> 中の他スレッド停止と言ってたから、
if(fork) {
sleep 3;
print "P:Hit Enter\n";
<STDIN>;
print "P:done\n";
} elsif(fork) {
$a=time,print("C1:$a\n"),sleep 1 for (0..7);
print "C1:done $a\n";
} else {
$a=time,sleep 1 for (0..7);
print "C2:done $a\n";
}
コレでHit Enterが表示された後、Enter入れるまでC1の表示が止まるんだと思う。
C2は、スレッドの停止とprintでのロックの判断用。
379 :
376 :2006/08/04(金) 19:36:05
>>377 そのスクリプトが載っていた本はjperlに準拠していて、
本に書いてある出力はjperlの方だったので、
ActivePerlがおかしいのかと思ってしまいました。
ありがとうございました。
381 :
296 :2006/08/04(金) 23:11:17
>>378 Windows上では1つのプロセスで同時には無理と考えるしかないみたいですね。
>324の使い方で挫折してまして、やはり実機でやろうとヤフオクに手を出したのですが、競り負けましたw
これ以上の追求は、いまの自分の知識ではついていけないので、ROMに戻りたいと思います。
いろいろ調べていただいて、ありがとうございました。
それでは。
382 :
297 :2006/08/05(土) 05:36:19
>>378 パイプで作ったプロセスの標準入力はコンソールではないから
無理のような気がするのですが。
383 :
デフォルトの名無しさん :2006/08/05(土) 11:14:12
httpsのページを取得する。 実際には、ETRADEのポートフォリオのページを取得したい。 Crypt::SSLeayを用いて取得可能?→使用方法不明 どうすればよい?
>>383 ソース読めば使い方なんか簡単にわかるよ。
>>384 使い方はわかった。
問題は、ログイン後にリンク先にいきやり方が
わからないだった。
なのでclose。
386 :
297 :2006/08/05(土) 14:31:17
387 :
デフォルトの名無しさん :2006/08/05(土) 14:42:10
data.txtに入っているデータを バブルソートを使って 4,3,A,AAA 7.21,B,BBB 2,9,C,CCC 10,2,D,DDD から 10,2,D,DDD 7.21,B,BBB 4,3,A,AAA 2,9,C,CCC に書き換えたいです。 ↓だとエラーが出ます>_<どうすればいいでしょうか open(OPEN,"<data.txt"); read(OPEN,$data,-s OPEN); close(OPEN); my @line=split(/[\r\n]/,$data); for ($count=0; $count<=$#line; $count++){ ($number[$count],$number2[$count],$number3[$count],$number4[$count])=split( /,/,$line[$count]); %incount = ( '$line[$count]' => "$number[$count]" ); } sort { $incount{$b} <=> $incount{$a} } @line open( FH, ">data.txt" ); flock( FH, LOCK_EX ); print FH @line; close FH2;
388 :
387 :2006/08/05(土) 14:42:53
すみません、バブルソートではなく普通のsort関数でした>_<
宿題?
390 :
デフォルトの名無しさん :2006/08/05(土) 14:48:53
いいえ。私のデータベースのデータの並び替えのプログラムを作って走らせたんですが エラーが出てしまいます>_<
最初のコンマの前の数字で大きい順に並び替えて 出力保存しようとしているのですが、なぜかエラーに・・・>_<
FH2 なんていうファイルハンドルはオープンされていないのだが。
%data_hash = (); open(IFH,"<data.txt") or die(); while(<IFH>){ $data_hash{(split /,/ , $_)[0]} = $_;} close(IFH); open(OFH, ">data.txt" ); for(sort {$b <=> $a} keys %data_hash){print OFH $data_hash{$_};} close OFH;
全く何がやりたいコードか分からん…
相手するなよ…
396 :
デフォルトの名無しさん :2006/08/05(土) 15:03:19
>>392 さん
すみません2消し忘れました>_<
>>393 さん
無駄のない書き方ありがとうございます。
もし
>>387 にあるような記述で書くのならば
どういうふうに書けばいいのでしょうか?
また、どこにエラーがあったのかも知りたいところです。
申し訳ないです。>_<
>>394 さん
>>387 のようにdata.txtのデータを行単位で読み込んで
行の一番最初にあるコンマの前の数字で大きい数字が上にくるような
データの並びに変えて出力保存したいです>_<
397 :
デフォルトの名無しさん :2006/08/05(土) 15:06:38
>>393 さんのソースで走らせたところ
10,2,D,DDD 7,21,B,BBB
4,3,A,AAA
2,9,C,CCC
と出力保存されました>_<
398 :
デフォルトの名無しさん :2006/08/05(土) 15:13:22
全然読んでないけど、 %incount = ( '$line[$count]' => "$number[$count]" ); これが分からん。 $incount{$line[$count]} = $number[$count]; という意図だろう。 あと、 sort { $incount{$b} <=> $incount{$a} } @line; これもダメ。 @line = sort { $incount{$b} <=> $incount{$a} } @line; としたいのだろうな。 あるいは、 for(sort { $incount{$b} <=> $incount{$a} } @line){ print FH $_."\n"; } と書きなさい。
399 :
デフォルトの名無しさん :2006/08/05(土) 15:16:48
>>397 そら、最終行に最初から改行記号が入ってなかったんだろう。
#!/usr/bin/perl open(IN, "<./in.txt"); @lines = <IN>; close(IN); @lines = sort { (split(/,/, $b, 2))[0] <=> (split(/,/, $a, 2))[0] } @lines; open(OUT, ">./out.txt"); print OUT @lines; close(OUT); __END__ こういう事?違ってたらごめん
401 :
デフォルトの名無しさん :2006/08/05(土) 15:19:49
>>398 ずばり、その通りでした!
今、走らせたらうまく行きました。
ありがとうです^^
ただ、並び替えした後は
10,2,D,DDD 7,21,B,BBB 4,3,A,AAA 2,9,C,CCC
と一行になってしまうので\nをそれぞれに入れてあげなきゃですね。
>>399 ずばり、そうでした。
ありがとうございます^^
>>400 sort の比較の中でsplitするのって無駄じゃね?
403 :
デフォルトの名無しさん :2006/08/05(土) 15:22:30
>>401 あなたのプログラムだと、改行記号を取り去っているからね。
>>400 さんとか
>>393 さんのだと、取り去っていないから改行記号が最初から入っている。
最終行だけは入っていない可能性があるけど。
404 :
デフォルトの名無しさん :2006/08/05(土) 15:23:34
>>400 さん
それでも出来ますね!
色んなやり方があるんですね。
ありがとうです。
>>398 さんの記述になおしたのですが
10,2,D,DDD 7,21,B,BBB 4,3,A,AAA 2,9,C,CCC
と一行表示されてしまいますね>_<
もういいだろ。
これでいいですか? open(OPEN,"<data.txt"); read(OPEN,$data,-s OPEN); close(OPEN); my @line=split(/[\r\n]/,$data); for ($count=0; $count<=$#line; $count++){ ($number[$count],$number2[$count],$number3[$count],$number4[$count])=split( /,/,$line[$count]); $incount{$line[$count]} = $number[$count]; } @line = sort { $incount{$b} <=> $incount{$a} } @line; for ($count=0; $count<=$#line; $count++){ $OUT .=$line[$count]."\n"; } open( FH, ">data.txt" ); flock( FH, LOCK_EX ); print FH $OUT; close FH;
>>406 で出来ました。
ありがとうございました^^
408 :
デフォルトの名無しさん :2006/08/05(土) 15:29:56
まあ、他の人の書き方をみて勉強するといいと思いますよ。 ということで次の質問どうぞ。
409 :
デフォルトの名無しさん :2006/08/05(土) 15:41:49
またデバッグもしないエラー隠蔽者の増大につながる「援助ごっこ」をやっていたのですか。
つーか無意味にageるキチガイどもはまとめて去れ。
このスレの住人は猛烈に頭がいいから困るw
412 :
デフォルトの名無しさん :2006/08/05(土) 17:44:44
プラグラマって職業柄か90%が性格ひねくれてるよな その90%のうちの、さらにひねくれてる連中が2chねらのテメーらってわけだが
>>412 さあ、プラグラム書きの仕事に戻るんだ。
語りストの話題もここでいいの?
>>414 どんな話題だってかまわないよ。
別の言語のネタだって。何したってもうこれ以上酷くなりようないしな。
>>383 <FORM name=form_login action=/ETGate/ method=post>
<INPUT type=hidden value=WPLETlgR001Control name=_ControlID>
<INPUT type=hidden value=DSWPLETlgR001Control name=_DataStoreID>
<INPUT type=hidden value=WPLETlgR001Rlgn10 name=_PageID>
<INPUT type=hidden value=loginHome name=_ActionID>
<INPUT type=hidden value=on name=getFlg>
<INPUT id=imedisable value=hoge name=user_id>
<INPUT type=password maxLength=10 size=12 value="" name=user_password ETGate trading2.etrade.ne.jp https:>
フォームはこのとおりなんだけど。
どうすればいいの?
>>386 ちなみに、HTML::Formはインストール済み。
418 :
デフォルトの名無しさん :2006/08/05(土) 23:07:06
420 :
347 :2006/08/06(日) 03:39:52
>>382 XP sp1 + ActivePerl 5.8.8 で確認してきたので、報告。
・<STDIN>での他スレッドブロックは、発生しなかった。
・openで開いたプロセスのSTDINは、元プロセスのSTDINを引き継いだ。
・とりあえず、296氏のコードを元に動かす事は出来た。
以下、確認環境では動いたコードのループ部分
-ループ部分
$|=1; select $socket; $|=1; select STDOUT;
if ($pid = fork()) {
while (<STDIN>) {
# print STDERR "[SEND START]\n";
# $rs = print $socket $_;
$rs = syswrite($socket,$_,length $_);
# $rs = send($socket,$_,0);
# print STDERR "[SEND FINISHED $rs]\n";
}
} elsif (defined $pid) {
$rin = '';
vec($rin,fileno($socket),1) = 1;
while(1) {
select undef,undef,undef,0.1 while select($rout=$rin,undef,undef,0.1)<1;
$buf = <$socket>;
last unless length($buf);
chomp $buf;
print "$buf\n";
}
}
受信側ループの select undef,undef,undef,0.1 while select($rout=$rin,undef,undef,0.1)<1;
がブロック回避用の記述。
これで駄目なら、ちょっと自分には難しいかも。
「ー」は、全角文字の2バイト目に『 [ 』のコードを含むので、 「ー」をマッチするとエラーが出るのを、うまくマッチさせるにはどうしたらいいかな?
EUC-JPとかUTF-16とかにしてから処理する もしくは、文字列の先頭から見ていって、どれがマルチバイト文字でどれがシングルバイト文字なのか調べていく とか?
\Q\E
いいかな?じゃねぇよ それが質問者の態度か いい加減にしろよ
>>425 僕はあまりこだわらんほうなので気にしないけれど、
>>421 の質問そのものはあまり上手じゃないね。
encoding の知識が少しあれば SJIS を使った場合の「おやくそく」だと読み取れるし、エラーも Unmatched なんちゃらだとすぐに思い当たる。
でもそれを回答者に期待しちゃダメよ。意図と現象の他に環境とエラーメッセージを書け、なんてつまらんことを繰返し言うのにはちゃんと理由があるのだから。
427 :
422 :2006/08/06(日) 13:56:51
ああ・・・ ごめん、すごい勘違いしてた。('A`)
さんざん encoding を使うなと言ってるのに、 それでも使う質問者がどうなろうと知ったこっちゃねぇ。
429 :
426 :2006/08/06(日) 15:24:31
>>428 ネタと思いつつ、、
encoding プラグマの話は出てきてないぞう。
実際無駄にソース貼りまくるよりはましな質問だと思うけどね。 何やりたいのかはわかるし。まあ質問の内容は糞過ぎだはな。
うん、まともな日本語使えてる分ましな方だはな。
プチ日下部が住み着いてるな。
>>430 言いたい事は分かるが何故このタイミングで言うかな。
>>432 そういうことにしてしまいたいのですね? ;)
暑さとカルシウム不足
迷信だよ。 確かにカルシウムは細胞の興奮に関係していて神経細胞も例外ではないが、 ホメオスターシスによって血中のカルシウム濃度は一定に保たれている。 もし、カルシウムの摂取が不足していたら、最初にまず破骨細胞が活発に活動して骨を溶かす。
ちなみに俺は ホメオスタシス 派だ。
俺はホモオスオカス 派だ。
質問です。 現在、txtファイルから読み込むデータを「,(半角カンマ)」区切りにして ($TITLE,$DATE,$EMAIL,$CONTENTS)=split( /,/,$IN); という形で取り出して 題名:$TITLE<br> 投稿日:$DATE<br> メール:$EMAIL<br> 内容:<br> $CONTENTS<br> としてHTMLで出力させています。 読み込む際に半角カンマ区切りをしているので、半角カンマの入力があった際に データ区切りの「半角カンマ」の邪魔にならないよう $in{'CONTENTS'} =~ s/,/、/g; という形で 半角カンマ→「、(読点)」に置き換えています。 ただ、これをすることで内容の部分に半角カンマが使われているAAを表示させたとき 半角カンマがすべて「、」になっているためAAが崩れてしまいます。 半角スペースは に置き換えることで対処したのですが 半角カンマの対処方法のアドバイスございましたら教えてください。 半角カンマで &nsbp;のような別の書き方は無いですよね??
Excelでそれと同じような表を作って、CSV形式で保存して、それをメモ帳か何かで開いてみろ
>>442 splitしたあと、表示する前に元に戻せばいいと思うよ。
445 :
デフォルトの名無しさん :2006/08/07(月) 10:08:09
>>443 ダブルクォートで囲まれますね。
でも、そのデータ自体を出力する際に
open( OUT, ">hoge.txt" );
flock( OUT, LOCK_EX );
print OUT $TITLE.",".$DATE.",".$EMAIL","..$CONTENTS;
close OUT;
となるのでダブルクォート入れられないですよね・・・
>>444 すみません。ただ内容の中に入る文字列が日記みたいなもので
「読点」がデフォでたくさん入ってるので、それらが全て
「,(半角カンマ)」になってしまいます>_<
例えば
hoge.txtの中身が
題名,8月7日,
[email protected] ,"aaaa,aaaaaaaa,aaaaaaaaa,aaaa",test
だったとして
($TITLE,$DATE,$EMAIL,$CONTENTS,$ETC)=split( /,/,$IN);
をしたら
$CONTENTSの中には aaaa,aaaaaaaa,aaaaaaaaa,aaaa が入りますか?
>>446 あんたの技量では自力では処理できない。
moduleを使え。
>>445 ある文字を別の文字に置き換えるだけじゃもとからその別の文字が元から含まれてたら
それがもともとその文字だったのか置き換えの結果によるものかわからないのは当たり前。
「,」→「\,」
「\」→「\\」
にするとか頭使えよ。
区切り文字を '\0' のような、テキスト中に普通登場しないものに変えろ。 また、テキスト中の'\0'はあらかじめ削除しろ。 '\0'を使ったAAは存在しないので、これで問題ない。 '\0' が 文字コード0の制御文字だってことがわからんレベルなら諦めた方がいいけど。
皆様、ありがとうございます。
カンマ区切りというのが一般的だと思っていたのですが
皆様工夫をこらして、
>>450 さんみたいに
”\0”とかで区切っているのですね。
ありがとうございました。
>>450 Perlの文字列リテラルだと'\0'は「\」と「0」の2文字なのでその書き方は不親切ではないかと思う。
"\0"と書くべきだな。
斜め上を行く理解をされたようだがそれはそれでいいか...
452は'\0'がだめだという話で"\0"ならok % cat null.pl print "double quote: ", "\0", "\n"; print "single quote: ", '\0', "\n"; % perl null.pl | hex 0x00000000: 64 6f 75 62 6c 65 20 71 - 75 6f 74 65 3a 20 00 0a double quote: @J 0x00000010: 73 69 6e 67 6c 65 20 71 - 75 6f 74 65 3a 20 5c 30 single quote: \0 0x00000020: 0a
>>455 わざわざ詳しい説明ありがとうございました。
保存する際に
open( OUT, ">hoge.txt" );
flock( OUT, LOCK_EX );
print OUT $TITLE."\,".$DATE."\,".$EMAIL"\,"..$CONTENTS;
close OUT;
でしておいて、読み込む際に
($TITLE,$DATE,$EMAIL,$CONTENTS,$ETC)=split( /\,/,$IN);
で問題解決しそうですね。
ありがとうございました。
こういうのがありました^^; $in{'CONTENTS'} =~ s/,/¸/g;
ここは笑うところで合ってる?
あってる
>>439 ちょっと知識つけただけの素人さんだったか。
ネット上でアホがいろいろ言ってるようだけど、いくつかの実験で
カルシウム欠乏だけでストレス増してるのが観測されてるよ。
すみません、先ほどの者ですが「 \0 」を実装したところ うまく行きました^^ ところで、既存のデータで既に「,(半角コンマ)」になってるものを 修正する際には 「,」→「\0」の置き換えでいいのですか? メモ帳でこの置き換えをしたら文字として認識されてしまいそうで^^; もしくは新しく出来上がったデータの \0にあたる部分をコピペして 置き換えでいいですか? 何度もすみません
>>442 ,
つーか、どうせ出力はHTMLなんだから,を見つけたら,に変換しとけばいいじゃん。
464 :
463 :2006/08/07(月) 12:55:18
オワっwww変換されやがった。もう一度全角でトライ。 &#44; つーか、どうせ出力はHTMLなんだから,を見つけたら&#44;に変換しとけばいいじゃん。
465 :
デフォルトの名無しさん :2006/08/07(月) 13:00:51
>>463 >>464 えっ!??!?
最初からその手があったんですかwww
&nsbpみたいなテクw
c++では以下の式では関数aとbのどちらが先に 実行されるかは不定ですだから実行順序に依存 した処理はするなと本にありました i = a() + b(); perlではどうなのでしょうか? i = a() + b();としたときa()とb()は必ずa(),b()の順で 実行されるのでしょうか?それとも不定なのでしょうか?
468 :
デフォルトの名無しさん :2006/08/07(月) 13:29:06
>>442 よーしパパ元データに <script type='text/javascript'>alert('Hello');</script> って居れちゃうぞー
>>467 評価の順番に依存するプログラムを書くべきではない。以上。
>>469 exit;
だけが許されるってことか。
>>467 処理系実装がどうかは置いとくとして、本質は同じ。
評価順を保証したければあらかじめ返値を保存して使えば目的は果たせるけれど、あんまりうれしくない。
$i = &a() + &b();
これを見て多くの人は、各項がいつ確定しようが $i は変わらないと感じるでしょう。
評価順への依存に気付き、その依存の内容を知るには、各関数でどのような副作用が生じているかを読み解かねばなりません。
結果としてコードがとても読みづらくなり、従ってある程度の量のコメントを必要とし、そしてある日突然動作しなくなる可能性があります。
ですからこのようなコードに直面した場合は構造化手法を見直したほうが良いでしょう。
>>465 TSV じゃダメなの? 値中の \t は s/\t/ /g するなり、s/\t/	/g するなり。
# てか /&nsbp;/ /
>>471 それ評価順の問題じゃなく関数がへぼいだけじゃん。
そんでもって引数が同じで結果が違うのは関数じゃないじゃん。
>>473 > それ評価順の問題じゃなく関数がへぼいだけじゃん。
なので関数の括り出し方などを考え直そうね、という主旨です。
ちょっと分かりづらかったかもしれませんね。
> そんでもって引数が同じで結果が違うのは関数じゃないじゃん。
サブルーチンと言い換えても構いません。Perl においては単に呼称の問題なので。
a() が b() に影響を与える (またはその逆) 処理を行っていたとして、どちらが先に評価されるかで式の結果が変わる、
あるいは式の結果には影響を与えないが、他の部分でその式における両サブルーチンの処理順に依存した処理を行っている、
などという設計は早晩破綻するに決まっているのでショボーンだよ、という話でした。
Mac OS X、Perl 5.8.6で使っています。 スクリプトをUTF8で書いて、use encoding(utf8)を使うと、デバッグができません。 use encoding(utf8); print "Hello world"; これをデバッグしようとperl -d で実行すると perl(24137) malloc: *** vm_allocate(size=4274921472) failed (error code=3) perl(24137) malloc: *** error: can't allocate region perl(24137) malloc: *** set a breakpoint in szone_error to debug Out of memory! Cannot create second readline interface, falling back to dumb. at /Library/Perl/5.8.6/Term/ReadLine/Perl.pm line 31 Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x183fff8)', 'GLOB(0x181129c)') called at /System/Library/Perl/5.8.6/perl5db.pl line 6029 DB::setterm called at /System/Library/Perl/5.8.6/perl5db.pl line 2034 DB::DB called at /System/Library/Perl/5.8.6/perl5db.pl line 9421 DB::fake::at_exit() called at /System/Library/Perl/5.8.6/perl5db.pl line 8993 DB::END() called at test line 0 eval {...} called at test line 0 perl(24137) malloc: *** vm_allocate(size=4287860736) failed (error code=3) perl(24137) malloc: *** error: can't allocate region perl(24137) malloc: *** set a breakpoint in szone_error to debug こんな感じになります。解決方法があったら教えてください。
>>475 スクリプトをUTF8で書かない、use encoding(utf8)を使わない。
>>475 use encoding を使うとデバッガは使えない。
たぶん、use utf8 を使うべきじゃないかな。
>>473 Perlでは time() も sleep() も関数。
そして、time()+sleep(10) という式の値は評価順によって異なる。
もちろん、「time()が関数でない」「time()やsleep()がへぼいだけ」等の
可能性は否定しない。
しかし、これは評価順の問題として扱うのが妥当だろう?
478 :
475 :2006/08/07(月) 20:03:06
>>475 それくらいわかってる上での質問デスヨ
>>476 アリガトン。use utf8だとデバッグはできるんですが、スクリプトを少し書き直す必要があるんです。
でも、use encodingが使えないなら、use utf8で書き直してみたいと思います。
479 :
デフォルトの名無しさん :2006/08/07(月) 21:15:57
nameに同じ名前を指定する時、 Input typeがcheckboxならばcgi-lib.plで処理出来るのですが hiddenの時も同じように処理は出来ないのでしょうか? &ReadParseの力を使っても何も表示されませんでした。お願いします。
480 :
475 :2006/08/07(月) 21:18:43
481 :
479 :2006/08/07(月) 21:41:05
>>480 初心者ですみません。
いつも簡単なPerlの質問はこのスレッドで質問させて頂いたのですが
他に適した場所がございましたら誘導お願いします。
>>481 おまえか!
ヒント:あなたの質問は
x Perl
o CGI
です。
にしても
>>475 は自分のこと棚に上げて何のつもりだか。
484 :
479 :2006/08/07(月) 21:51:45
>>483 すみません、誘導ありがとうございました。
以後気をつけます。
485 :
475 :2006/08/07(月) 21:55:14
>>480 人の名前騙るなよ。
俺は480みたいな事言いませんよ。ID見てよ。
487 :
475 :2006/08/07(月) 21:56:34
ってIDでないじゃんこの板。違うよー、480は俺じゃないよー。スレ汚しスマソー。
>>478 >
>>475 それくらいわかってる上での質問デスヨ
# アンカーがアレなのは置いといて、
あなた様がどれくらいわかっているのかについて、私どもは事前にお示し頂いておりません。
ゆえに
>>476 の無礼も無理からぬ事と存じます。ここはどうか寛大なお心でご勘弁ください。
ちなみにおれ様は何もわかってないよ。 (念の為、事前に示しておいたワケ。)
>>487 480が誰だとかそういう以前の問題だろ。二度と来ないで欲しい。
ナ ゝ ナ ゝ / 十_" ー;=‐ |! |! cト cト /^、_ノ | 、.__ つ (.__  ̄ ̄ ̄ ̄ ・ ・ ミミ:::;,! u `゙"~´ ヾ彡::l/VvVw、 ,yvヾNヽ ゞヾ ,. ,. ,. 、、ヾゝヽr=ヾ ミ::::;/  ゙̄`ー-.、 u ;,,; j ヾk'! ' l / 'レ ^ヽヘ\ ,r゙ゞ゙-"、ノ / l! !ヽ 、、 | ミ/ J ゙`ー、 " ;, ;;; ,;; ゙ u ヾi ,,./ , ,、ヾヾ | '-- 、..,,ヽ j ! | Nヾ| '" _,,.. -─ゝ.、 ;, " ;; _,,..._ゞイ__//〃 i.! ilヾゞヽ | 、 .r. ヾ-、;;ノ,.:-一'"i j / ,.- 、 ヾヽ、 ;; ;; _,-< //_,,\' "' !| :l ゙i !_,,ヽ.l `ー─-- エィ' (. 7 / : ' ・丿  ̄≠Ξイ´,-、 ヽ /イ´ r. `ー-'メ ,.-´、 i u ヾ``ー' イ \_ _,,......:: ´゙i、 `¨ / i ヽ.__,,... ' u ゙l´.i・j.冫,イ゙l / ``-、..- ノ :u l u  ̄ ̄ 彡" 、ヾ ̄``ミ::.l u j i、`ー' .i / /、._ `'y / u `ヽ ゙:l ,.::- 、,, ,. ノ ゙ u ! /_  ̄ ー/ u / _,,..,,_ ,.ィ、 / | /__ ``- 、_ l l ``ーt、_ / / ゙ u ,./´ " ``- 、_J r'´ u 丿 .l,... `ー一''/ ノ ト 、,,_____ ゙/ / ./__ ー7 /、 l '゙ ヽ/ ,. '" \`ー--- ",.::く、 /;;;''"  ̄ ̄ ───/ ゙ ,::' \ヾニ==='"/ `- 、 ゙ー┬ '´ / \..,,__ 、 .i:⌒`─-、_,.... l / `ー┬一' ヽ :l / , ' `ソヽ ヾヽ l ` `ヽ、 l ./ ヽ l ) ,; / ,' '^i
EmacsスレといいPerlスレといい UNIX上でそれなりに歴史長いやつのユーザーには 年甲斐のない人が多いんでつね。 な ん で バ カ を 放 置 で き な い ん だ ??
494 :
デフォルトの名無しさん :2006/08/08(火) 08:57:35
utf8で print length ('1234567890'); ってやったら30って出たんですけどどうしてですか?
utf8 ってなんだかわかっててきいてるんですか?
>>494 use utf8をしないでスクリプトをutf8で書いただけなんじゃないか。
>>494 utf8では、'0123456789'が30バイトだから。
念の為、Perlの標準では1文字は1バイトで、30バイトの文字列の文字数は30。
>>494 use encoding "shiftjis";
print length ('1234567890');
ってしたらちゃんと10って出たYO。
SJISで書いたけど。
lengthが文字列長を返すような環境で、 文字列の桁揃えをして出力するいい方法は無いでしょうか。
Jcodeでも使えば?
ごめんね かぁさん初めて自演したから ごめんね
みんななんで自演てわかるの?(´・ω・`)
>>505 自演って自分で問題提起して自分で返事するみたいなやつよね?
>>494 が
>>499 と同じ人なのは予想できるけど、
>>501 以降はマジわかんない・・・。
何か見方があるのかと思ったけど洞察力なのか (´・ω・`)
507 :
499 :2006/08/08(火) 11:19:06
>>506 いや、別人なんだこれが。
答えなさそうだしもういいです。
>>508 自演だってなんだっていいよ。それより頼むから馬鹿な質問に条件反射で答えないでくれ。
print decode('euc-jp', sprintf("%-8s hoge\n", encode('euc-jp', 'ほげほげ'))); とか。
つーかお前らformatって知ってるか?
format のせいで余計な組み込み関数が増えたね。 あれこそモジュールでいいような。
>>511 知ってるけど今回の文字幅の問題をなんとかしてくれるようなもの
だったっけ?
514 :
494 :2006/08/08(火) 18:24:30
うわ、ageて質問したら盛り上がりましたね。499とは別人です。
515 :
494 :2006/08/08(火) 18:25:50
おこたえいただき、ありがとうございました。
σ(^-^;)
>>371 で質問した者です。再び質問させてください。
FTP転送を行うスクリプト
ttp://joe.ash.jp/pc/netprog/ftp.pl.txtに alarm関数を使いFTPサーバー側の応答が指定した時間(秒)なければ待つのをやめて
次の処理へ進むという処理を追加したいと思ってます。
しかし、alarmによるタイムアウト処理のサンプルを探してくると以下のように
dieでスクリプトを終了させてしまうものばかり出てきます。
$timeout = 30; # タイムアウトまでの時間(秒)
$SIG{ALRM} = sub {
if ( defined $pid ){
kill 'TERM',$pid;
}
die "FTP TIMEOUT...";
};
alarm($timeout);
サーバーの応答を待つ処理だけを中止して次の処理へ進むようにすることは
できないのでしょうか?
環境は以下の通りです。
OS: Linux 2.6.9-1.667 #1
Perl: v5.8.5
evalブロックでdieを捕捉するなり何なり eval { # try $SIG{ALARM} = sub { ... die "FTP TIMEOUT..."; # throw }; alarm($timeout); }; if ($@) { # catch(timeout) }
select使えばいいのに……
521 :
518 :2006/08/09(水) 06:43:50
>>519 なるほど
eval使えばできるんですね。
>>520 やっぱりselectで、できるんですか。。
はじめまして。質問させてください。 テスト1:<b>テスト結果1</b>テスト2:<h1>テスト結果2</h1>テスト3:<u>テスト結果3</u> という上のデータを読み込んだ時、それぞれテスト結果1〜テスト結果3までを$TEST1〜$TEST3の変数に 入れたとき、どうすればいいでしょうか? split関数で割りまくっていくしか方法はないですか? ちなみにテスト1:<b>$TEST1</b>テスト2:<h1>$TEST2</h1>テスト3:<u>$TEST3</u> みたいな書式から変数を割り出せればよいのですが・・・
>>521 > やっぱりselectで、できるんですか。。
Net::FTPなんかはselect使いまくりだが。
配列から重複する要素を取り除くサブルーチンを作ったのですが 結果が変です。どなたか教えてください。 結果: 123456 123456123456 #!/usr/bin/perl -w my @list1 = (1, 1, 2, 3, 4, 5, 6); my @list2 = (1, 2, 3, 4, 3, 2, 5, 6, 1, 4, 6, 4, 6, 5); print delete_repeated_element(@list1); print "\n"; print delete_repeated_element(@list2);
sub delete_repeated_element{ my @list_in = @_; while(@list_in){ my $element = shift(@list_in); @list_in = delete_element($element, @list_in); push(@list_out, $element); } return @list_out; } sub delete_element{ my ($a, @list_in) = @_; my $element; my @list_out; foreach $element(@list_in){ push(@list_out, $element) unless $element == $a; } return @list_out; }
あ、分かりました。 @list_outがグローバルなんですね。
めんどくさがらないでstrictぐらいつかえっツーの
use Array::Uniq; my @list1 = (1, 1, 2, 3, 4, 5, 6); my @list2 = (1, 2, 3, 4, 3, 2, 5, 6, 1, 4, 6, 4, 6, 5); my @uniq1 = uniq sort @list1; print "uniq1: @uniq1\n"; my @uniq2 = uniq sort @list2; print "uniq2: @uniq2\n";
530 :
デフォルトの名無しさん :2006/08/09(水) 17:33:32
file1.datのような構成を、大項目毎に区切ろうとkugiri.plを作りました。 が、大項目の頭の1文字が消えてしまいます。(DATA1がATA1になってしまう) splitで/\n[^\t]/を区切りにしている為だと思うのですが、 うまくsplitする方法はないでしょうか? スマートにやることが目的です。 $cat kugiri.pl $/=''; open(IN, 'file1.dat'); my $readfile=<IN>; close(IN); @lines=split(/\n[^\t]/, $readfile); $cat file1.dat DATA1 <tab>a <tab>b DATA2 <tab>c <tab>d <tab>e ※<tab>=タブ(\t)
>>530 > @lines=split(/\n[^\t]/, $readfile);
これでどう?
@lines=split(/\n(?!\t)/, $readfile);
532 :
デフォルトの名無しさん :2006/08/09(水) 18:32:22
Perlで出力文字のフォント(大きさと書体)を変更したいのですが、 そのような演算子はありますか?
ない
535 :
デフォルトの名無しさん :2006/08/09(水) 18:36:44
my $flags = 36; # 適当なbit flags 例えば32bitとする my $bit = 2; # セットしたいbit位置(を1にした値) my $flag = 1; # セットするflag状態 0 or 1 として、bitのset、resetを行うような処理を、 my $mask = ~$bit; $flags &= $mask; $flags |= $bit if $flag; こう書いているのですが、もうちょっとなんとかなりませんかね。
初めてperlで簡単なプログラムくんだけど もうね・・疲れたよ UTF-8フラグとか、UTF-8Nで保存とか なんでperlは、いろいろ面倒なの? でもねでもね、完成したときは今までで一番嬉しかったよ
配列の代入について質問があります。 my(@a, @b) = (@x, @y); とすると、 @a == (@x, @y) @b == undef となりますが、 @a == @x @b == @y とする簡単な方法はありますでしょうか? サブルーチンへの引数として二つのリストを渡すときに 問題になると思いますので、簡単な方法があるのでは ないかと思いますがいかがでしょうか?それともわざわざ 二つのリストの長さも引数として渡さなければならないの でしょうか?
>>538 サブルーチンへ渡すときはリファレンスを。
func( \@a, \@b );
> my(@a, @b) = (@x, @y);
の場合なら
@a = @x;
@b = @y;
と書くのが分かりやすいのでは。
>>539 ありがとうございます。
はじめてのPerlには載っていなかったので分かりませんでした。
>>530 @lines=split(/(?=^DATA)/m, $readfile);
# perl -MCPAN -e 'install Template::Extract' すると ***略*** t/fileline............ok 6/11FAILED 9: - template text 3 did not match expected t/fileline............FAILED test 9 Failed 1/11 tests, 90.91% okay ***略*** になり、 installできないんだけど。どうしてかな? 環境は、FreeBSD6.1
543 :
530 :2006/08/10(木) 10:18:40
亀レスですいません。
>>531 (?!regexp)を知りませんでした。ありがとうございます。
>>541 大項目名はDATAで始まるとは限りませんのでこれは使えませんね。
因みに$/=''としている場合、mオプションは有効なのでしょうか?
544 :
デフォルトの名無しさん :2006/08/10(木) 10:56:19
プログラミングの経験はまったくない。 パソコンに関してはPC-DOSやbashでバッチファイルを作るぐらいのことしかしたことがない。 そんな俺が切実な事情でperlを上級レベル、職業レベルにまで高めたい。 毎日2時間は学習時間が取れる。3ヶ月で可能だろうか? この手の言語を取り扱う人が余裕や見栄で言う、「そんなもん1週間でできるぞ」みたいなレスは今回は辞退したい。 何を要にして学習すればいいのか、キーワードだけでも教えてくれんだろうか。
つ[初めてのPerl] つ[続・初めてのPerl] つ[Perlクックブック] つ[プログラム言語Perl] つ[実用Perlプログラミング] つperldoc つCPAN つGoogle つ「ひたすら手を動かすべし」
>>543 //m 有効だよ。っつーか試せばいいじゃん。
@lines = split /^(?!¥t)/m, $readfile ;
@lines = split /^(?!¥t)/, $readfile ;
>>544 なにがしたいの?
1000時間単位で言語を使ってても、出来ることもあるし、出来ないこともいっぱいあるよ。
まあ、何をどうしたいのかによって答えは違う。
Perlで綺麗な記述(分かった記述)を書くのは最低でも1000時間必要かと思う。
548 :
544 :2006/08/10(木) 13:16:03
>>545 やっぱりオライリーのやつが定番か。サンクス
>>547 いわゆるwebプログラマとして扱うperlではなくて、UNIXサーバの各種オペレーションやバッチ処理、
ネットワーク機器のオートパイロットやログ解析に使いたい。
昔sed/awkというものがあったと思うけど、ああいうものを使ってやることをperlで、ってことかなぁ。
なのでCGIとかの技術には興味なしです。
>>544 > 毎日2時間は学習時間が取れる。3ヶ月で可能だろうか?
もっとも大きなファクターは、あなたの才能。
> 何を要にして学習すればいいのか、キーワードだけでも教えてくれんだろうか。
わたしは、新しい言語をマスターする時は、何か適当な大きさのカタマリを
作ってみるが。
あとは、「あれもこれも出来るように」なることではなく、
「あれやこれをしたいと思った時にそのやりかたを調べる方法」を
掌握するのが目標だということを忘れずに。
どこまでが上級かという線引きがとても難しいけど プログラム初心者が2時間×3ヶ月で辿り着けるのは いいとこ中級レベルじゃないかな。 言語を敷居の低いPHP(CLI版)にするか勉強時間を 増やすかの妥協をしないと無理だと思う。
>>544 3ヶ月なら、1日2時間じゃ足りないと思う。せめて3時間は欲しい。
日に3時間取れても上級にはならないかも
↑の用途だとOOPに固執する必要はないと思うから早く済むんじゃないかな
>>548 その程度のことなら1週間で余裕。
むしろPerlよりもシステム管理についての知識のほうが重要。
>>548 の用途でも、1週間では職業レベルに行き着かないだろ
1週間しかPerl勉強した事の無い奴に会社の鯖任せられないって。
プログラミング言語の習得に必要な時間は本人の才能が最大要素で、 人によってかかる時間が100倍も違ったりします。
>>548 perlよりもUNIXやネットワークの勉強が重要な気がする。
才能なんか関係ないよ。要はやる気。 興味のないものを永遠とだらだらやっててもそりゃ100年たっても終わらない。 俺は4年間で10以上の言語覚えたけど、才能があるかって言ったらそうじゃないわけで。 プログラミング言語を作る、という目標から自然に起こった動機がそれを可能にしたんだと思う。
560 :
544 :2006/08/10(木) 15:27:45
>549 拝承。やっぱりそれで正解なのかな。 googleで、自分のやりたいことに近いことをやっている人を見つけて、 そこに書いてることを理解していく、というやり方は反則なのかなと思っていた。 >550 ブックma-kuした。thx >551 >552 >553 >554 実際は5ヶ月なのを余裕をもって3ヶ月としてみた。 死ぬ気でやってみる。ありがとう。 OOPとやらについてはおいらはPGじゃないので必要になる局面が無い。 >555 >556 >558 もともとL1〜L3のインフラ屋(足回り)やFW、IDS運用者だったんだけど今まではTERATERMやExcelでしのいできた。 それだとあまりに非効率なので。UNIXについてはFreeBSDしかしらないけど今後触れる機会が増えそうなので。 >557 >559 「必要に迫られている」状態なので気持ちで乗り切る。ガンバル
pythonにしておけ。
>>560 OOP要らないって言うけど、使いたいモジュールがOOPで書かれてたりすると
最低限は知っておかなきゃいけなくなる。
ネットワーク系のモジュール多いし。
全部自分でやろうとせずに、既にあるものについてはそれ使った方が良い。
まぁ、それでも相当数は書く事になるでしょう。
あとテストは慎重に。
場合によってはノンパスワードのsshやら、sudoやらを
使わなければいけなくなると思うので。
と、大手ISPでperlを腐る程書いた俺が言ってみる。
563 :
デフォルトの名無しさん :2006/08/10(木) 20:16:28
>>561 彼の用途だとRubyでいいのでは
ネットワーク機器の処理ならexpectでいいとも思うけど
Rubyだとマシンにインストールして回らなきゃいけなくなるんだよね。 お客さんのマシンがあると、インストールさせてもらえなかったり。 ということで消去法的にPerlになっちゃう。 Rubyで書いた事もあるけど、会社の人間が新しい言語が混じるのを喜ばない。
>>564 私も同じ理由でperlを使ってたんだけど、
最近はCPANモジュール使ったりで結局インストールして回ってたりします。orz
rubyよりはpythonのほうがインスコされてる可能性高い。
567 :
デフォルトの名無しさん :2006/08/10(木) 22:22:32
↓を引数なしで実行すると"Use of uninitialized value in string eq at test.pl line 3."とエラーが出るのですが、 use warningsを外さないでエラーを出さないようにする方法はないですか? #!/usr/bin/perl use warnings; if($ARGV[0] eq 'test'){ print "TEST"; }
if(defined $ARGV[0]){.....}
569 :
567 :2006/08/10(木) 23:00:05
>>568 d。先に↓の処理をすることで対応しました。
if(!defined($ARGV[0])){ $ARGV[0]=''; }
むしろ$ARGV[0]を直接振り回さないで $val = (defined $ARGV[0]) ? $ARGV[0] : ""; とかしたほうが無難な気がする・・・
571 :
567 :2006/08/10(木) 23:49:49
>>570 確かに$ARGV[0]を書き換えるのはよろしくない気がします。
変数は使わずに↓のようにしてみました。
if((defined($ARGV[0]) ? $ARGV[0] : '') eq 'test'){ print "TEST"; }
横だけど、それやったら素直に if( defined $ARGV[0] and $ARGV[0] eq 'test' ){....} やん?
573 :
567 :2006/08/11(金) 00:11:38
POE-0.36のChangesを見ると8/7にそれっぽい修正が入ってるような
575 :
574 :2006/08/12(土) 11:57:49
Pugs触ってるけど、Perl6ってもう覚え直しだな。全然別言語。
んなこたぁ、改めてここに書くまでもなく周知のことだよ。
#! /usr/bin/perl $tmp = "1234dfg"; $tmp =~ tr/123//; print $tmp; これの出力結果がなぜか 1234dfg のままなのですが なぜ 4dfg にならないのでしょうか perlのバージョンは v5.8.4 です。
>>578 削除したければ
$tmp =~ tr/123//d;
詳しくは
> perldoc perlop
>>554 皆の言う取り素養に寄るところが大きいとは俺も思うが努力で十分カバーできると思うよ。
エジソンの名言があるだろ?
「天才とは99%の努力と1%の才能である」
自分の才能の99倍の努力をすれば夢は叶う、夢を叶えられる人間こそ「天才」なのだと俺は解釈している。
ガンガレ!!
>>580 ちがうちがう。エジソンちがう。
○ 「天才とは 1%のひらめきと99%の努力 である」
インスピレーションをどう訳すかは諸説あって難しい。
ひらめかない奴は、努力の使い道がないwww
>>582 しかし "才能" のニュアンスは gift とか sense に近くて inspiration ではないよーな。
ひらめくけど努力しないやつ = 器用貧乏
ひらめかないけど努力はするやつ = サラリーマン
?
585 :
デフォルトの名無しさん :2006/08/14(月) 23:19:56
>>567 >#!/usr/bin/perl
>use warnings;
>if($ARGV[0] eq 'test'){ print "TEST"; }
if("$ARGV[0]" eq 'test'){ print "TEST"; }
適当だけどこれでどう?
>>584 器用貧乏ってそういう意味じゃないんじゃないの?
はっきりと意味を分かっているわけじゃないけど、漠然とした感じがすでに違うと思う。
>>580 スクリプトのコーディングを練習して上達するということにひらめきは全く必要ないかと。
「天才とは99%の努力と1%のひらめきである」の言葉の本質は
世の中で過去の経験則で成り立っている常識の概念に変化を与える道筋を見つけるのには
まずひらめきというあかりが必要で、その道筋を見つけてもそれが間違った道でないと
証明しインパクトを与えるには先駆者として沢山の様々な障壁を継続的に解決する
努力も求められるよということで、
>>544 がやろうとしていることには全くの新規性がなく
既に沢山の先駆者が存在しドキュメントも非常に豊富。
なので544に求められる能力はひらめきではなく学習能力の高さと学習の量。
これは見たことも会ったこともなく客観的なデータもない状態で
544の書込みからは3ヶ月、1日2時間ずつと学習の量だけしか示されてないので
544にはできるかと評価しろといわれても難しいと思う(すくなくとも俺には無理)。
あと「perlを上級レベル」というのも544にとってなにをもって上級と感じるのか、
「職業レベル」というのはとりあえず動いているスクリプトで金銭を受け取っているから職業レベルとするのか
技術を売るからには責任を持って事にあたれ、常に情報を継続的に収集・検証できてる人を指すのかで非常にレベルの差がある。
どういうイメージしてるのかわかんないけど
職業レベルというからにはperlのコーディングを覚えて終わりではなくて
システムとネットワークの知識、情報収集力もそれなりに必要になるよ。
ぶっちゃけ、1日2時間しか取れないんだとよほど学習能力高くねぇと無理じゃね?
ちゃんと技術力のある会社にバイトとして入って徹夜もいとわず1日中仕事に就きながら
スパルタで仕込まれ、3ヶ月間逃げ出さなければいけるよ。
>ちゃんと技術力のある会社にバイトとして入って徹夜もいとわず1日中仕事に就きながら >スパルタで仕込まれ、3ヶ月間逃げ出さなければいけるよ。 それが難しいとか。
591 :
588 :2006/08/15(火) 01:19:00
>>589 ごもっとも。
上記のことを実行するとなると
ちゃんとした会社を探だし、
雇用を獲得し、
絶望的なまでのレベルの差のプレッシャーにめげず、
毎日あたりまえのように長時間就業しても
体・心ともに健全でいられること
という結構難しい条件をクリアしないといけないです。
でも他のプログラミング言語経験がなく
システム/ネットワーク設計・構築・運用がない人間(544の書込みで勝手に推定)が
職業できちんと通用するスキルを短期間で獲得となると、
それなりの努力は必要だと思う。
ちゃんとした会社がバイトにそんな事をさせるとはとても思えないけど
593 :
588 :2006/08/15(火) 01:26:53
>>592 あぁ、めんご、591のカキコでは「技術力が」が抜けてた。
588の方ではちゃんとはいってるッス。
>>590 2chも/.も/.Jも読むけどなんで?
./からこのスレにリンクされてるの?
595 :
588 :2006/08/15(火) 01:51:39
>>594 そういうことッスか。
長文のマジレスすんませんでした。
失礼します。
596 :
デフォルトの名無しさん :2006/08/15(火) 12:00:40
ウィルコムのPHSにメールを 送信すると文字化けするんです jcodeで文字コードを変換してるんだけど↓ jcode'convert(メール本文, "jis"); なにか駄目なところがありますでしょうか? 携帯に送ると文字化けしないんです SMTPサーバーのOSはFedora Core3です
RFC2822
PHSに送ったメールをPCに送信して文字化けしないのかは確認されましたでしょうか? charsetは適切に設定していますか? 情報が足りなさすぎ! とりあえず送信したのをヘッダー付でここに貼り付けろ! 質問はそれからだ。
599 :
596 :2006/08/15(火) 12:50:45
>>597 >>598 回答ありがとうございます。
情報不足すみませんでした。
おそらくsubjectにMIMEエンコードしていないことが
原因かなと気付きました。現在テストできない状況なんです・・・。
件名は文字化けしていないのですが、
最後の1文字が切れていましたので
怪しいなぁと。
charsetは未設定でした。
テストの結果はまたご報告します。
なんでまたPHS…
601 :
597 :2006/08/15(火) 13:06:31
頼むからヘッダと本文と、正しいメッセージを送出してくれ。 携帯はキャリアのgatewayが変換しているからそれなりに融通が利くんだろう。 Willcomは、端末のMUAの出来がいまいち(対応範囲が狭い)。 それでも、ヘッダ不足とかの規格外メッセージが読めないのはあたりまえ。 送出側がまずは正しいフォーマットで作成すること。
>>596 のはperlの話題ではなくmailに関する質問でスレ違いだな。
605 :
603 :2006/08/15(火) 15:17:54
質問者と勘違いしてる?
エジソンの言いたかったことは、1%のひらめきもない凡人が努力をしてもムダということだよね。 努力じゃなくて、1%のひらめきを持っていることが大切と。
608 :
603 :2006/08/15(火) 16:39:16
妄想の激しい子だね
/' ! ━━┓┃┃ -‐'―ニ二二二二ニ>ヽ、 ┃ ━━━━━━━━ ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ┃ ┃┃┃ ' Y ー==j 〈,,二,゙ ! ) 。 ┛ ゝ. {、 - ,. ヾ "^ } } ゚ 。 ) ,. ‘-,,' ≦ 三 ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚ '=-/ ヽ゚ 。≧ 三 ==- / |ヽ \-ァ, ≧=- 。 ! \ イレ,、 >三 。゚ ・ ゚ | >≦`Vヾ ヾ ≧ 〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
これは酷いな……。
次スレからはPerlについてでもそうでなくてもいいアホな質問箱、でよろ
perl でCGI.pmをつかってCGIを作っていますが、 tableの行をforeach文で増やしたい場合は、どのようにするのが適切でしょうか? . . foreach (@abc){ $q->Tr( $q->td($q->b("xxx")), $q->td($q->b("yyy")) ) } . . のようなカタチでやってみると、うまく表示が出ません。 この描き方は間違っているのでしょうか? ご教授お願いします。
614 :
612 :2006/08/15(火) 20:58:44
誘導されて向こうに行っただけだろうが…
向こうでもマルチとレスをすれば完璧
618 :
デフォルトの名無しさん :2006/08/16(水) 01:45:43
もーお手上げなんですが、 ひとつも\(バックスラッシュ)が含まれていないものにのみマッチする 正規表現ってありますか? $test = "\\engo\\"; #\のマッチ回数が0回のもの if ($test =~ /[\\]{0}/){ print "matched\n"; } これだと $test = "engo\\"; にしてもマッチします。 $test !~ /[^\\]/; とするのがよさそうですが、 それ以外でする方法があればぜひ・・
/^[^\\]*$/
$test !~ /\\/; で十分では。
621 :
デフォルトの名無しさん :2006/08/16(水) 02:06:55
>>619 なるほど!ありがとうございます!!
>>620 そうしたいところなんですが、
どうしても!~が使えないところでして・・・
助かりました。
ありがとうございますー
622 :
デフォルトの名無しさん :2006/08/16(水) 11:00:47
pugsはhaskellによるperl6の実装とのことですが、 parrot上で走るhaskellコンパイラは登場するのでしょうか。
| |_  ̄| / ̄\ ___ | |/ .___| ___| l .∧ / /| \ノ\ \ノ\ ∨ ∨
99%の努力と1%のひらめき ってのは本人に聞いたときは 何かひらめいたところで、普段から努力してねーやつには 実現は不可能だぜざまーみろ愚民め という意味だと言ってた。
あの世からのカキコですか?
2chとは99%の駄レスと1%のひろゆきである
上の方で、/.から来たとか./からどうたら言ってますが、 いくら考えても分かりません。解答よろ。
628 :
デフォルトの名無しさん :2006/08/16(水) 19:14:43
txt読み込み → 処理 → 次のtxt読み込み → 処理 → 次の次・・・ このような流れを一回の実行(一つの処理)としてやりたいのですが、可能でしょうか?
631 :
デフォルトの名無しさん :2006/08/16(水) 19:23:26
>>630 可能ですか!
よろしければやり方を教えてもらえないでしょうか?
>>628 perl -e 'undef $/; while (<>) { /(?#好きな処理)/ }' *.txt
633 :
631 :2006/08/16(水) 20:33:18
自分でできました。
634 :
627 :2006/08/16(水) 21:22:16
>>629 ありがとござますた。常識なくてすませんm--m
リャマ本読み終わって続読み途中です もっと「練習問題」を解きたいのですが、どこかに問題ないでしょうか?
>>637 一生かかっても解けない奴が多い問題が練習問題かぁ
貴方は神ですか?
おまんこサンチェスすぽぽぽぽーん!
サンチェと井沢の再会シーンは、グッと来た。 ちょっと涙ぐんでしまった。
641 :
デフォルトの名無しさん :2006/08/17(木) 11:03:22
>635 Common Lisp と Scheme は実装予定なんですね。
>>636 練習問題をさがすよりは・・・
CPANモジュールのインストールと使用方法に習熟するのを薦める。
今だったらCGI::ApplicationとCatalyst関係が
いいかな。
mod_perlなどもおすすめ
ただし、英語がわからないとつらいかも
>>642 今Catalystが熱い!ってどこかで聞いたので頑張ってインストールしてみたものの
そこからどうしていいのやら・・・情報が英語ばかりですね
とりあえず基本的なCPANモジュールから使っていこうかと思います。
おー がんばれー
catalyst思いっきり上級者向けだわな 今まで上から順番に実行されてくようなスクリプトしか見てこなかった俺は これがほんとにperlかと疑った
>>645 > catalyst思いっきり上級者向けだわな
別に。
>>643 Web+DB PRESS vol. 32 の Recent Perl World で Catalyst の入門特集組んでましたよ。
執筆は確かハテナオヤ氏。
( ゚д゚) < Catalystが上級者向け? (つд⊂)ゴシゴシ (;゚д゚) (つд⊂)ゴシゴシ _, ._ (;゚ Д゚) …?! Catalystを作った奴は上級だけど使うのはそんなに難しくねぇだろ。
その Catalyst っての使うと何が楽になるのー?
>>649 WEB検索使って調べることも出来ない奴はROMってろ。目障りなんだよボケ。
次の質問どうぞ。
rename($oldname,$newname); $newnameのファイルが既に存在していると、 勝手に上書きされてしまうんですが、 連番などを付けて上書きしないようにすることはできますか?
653 :
デフォルトの名無しさん :2006/08/19(土) 07:56:20
$ren_value = 0; for (@ARGV) { $oldname = $_; $newname = $oldname; $newname =~ s/hoge/fuga/g; unless($oldname eq $newname){ $newname_pre = $newname; while(-f $newname){ $newname = "$newname_pre\($ren_value\)"; $ren_value++; } } $ren_value = 0; rename($oldname,$newname); } なんだかスマートではない気がしますが自己解決しました、 拡張子とファイル名を分けていなかったのでそちらが問題となりましたが こちらはすぐ解決しそうです
$new =~s/\[(\d+)\]$/"[@{[$1+1]}]"/e or $new .= "[1]" while -f $new;
PerlでパスワードつきZIPを作りたいんだけど、どうすれば良い?
656 :
655 :2006/08/19(土) 16:52:26
Windowsです。すいません。
>>655 甚だしく意味不明瞭な質問だが……
段階1: CPANでパスワードつきZIPを作るモジュールを探してそれを使う
段階2: CPANになかったら、ZIPの仕様を調べてパスワードつきZIPを作るプログラムを書く
658 :
あやか :2006/08/20(日) 02:29:14
#both $name = "[picture415]hogex.jpg"; $v1 = '\[picture(.+)\]'; $v2 = "(picture$1\)"; $name =~ s/$v1/$v2/g; #single quote $namex = "[picture415]hogex.jpg"; $v1x = '\[picture(.+)\]'; $v2x = '\(picture$1\)'; $namex =~ s/$v1x/$v2x/g; #direct $namexx = "[picture415]hogex.jpg"; $namexx =~ s/\[picture(.+)\]/(picture$1\)/g; 三番目の #direct のように 直接書くと意図した動作になるのですが、 一番目と二番目のように、変数を使って正規表現の置き換えをしようとして失敗しました。 下のように(これも上記のように動作しない)、 (正規表現1),(正規表現2)[改行] ×n のように記述されたテキストファイル、seiki.txt を読み込んで 置き換えしたいのですが、何をどうすれば意図した動作が実現しますかね? $filename_example = "[picture415]hogex.jpg" open (SEIKI,"seiki.txt"); @seiki = <SEIKI>; close (SEIKI); chomp @seiki; foreach $raw (@seiki) { ($before,$after) = split (/,/,$raw); $filename_example =~ s/$before/$after/g; }
$1 の部分は正規表現ではなく、特殊変数のなので、 上の2つは失敗します。 特殊変数を含まない普通の正規表現なら変数に格納しようが 何の問題も無いです。
660 :
あやか :2006/08/20(日) 03:10:19
>>659 特殊変数を使う場合は直接記述するしかありませんかね?
evalとか?
662 :
あやか :2006/08/20(日) 04:42:22
>>661 $name = "[picture415]hogex.jpg";
$v1 = '\[picture(.+)\]';
$v2 = '(picture$1\)';
$exec = '$name'."=~ s/$v1/$v2/g;";
eval $exec;
print "$name\n";
どうやらできたみたいです、どうも\(^o^)/
663 :
ken :2006/08/20(日) 21:53:01
こんばんはperlの事でおききしたいんですが ほかのファイルの文字をとってきたいんですがどうしたらいいでしょうか? AAA BBB="CCC" このtxtファイルからCCCを取りたいです 文章下手ですみません よろしくおねがいします
open fh,$file; my@a=<fh>; close fh; my$b=substr($a[1],5,3);
>>663 my %hash;
open my $fh, "<", "663.txt" or die;
while (<$fh>) {
chomp;
next if $_ eq '';
my ($name, $value) = split /=/, $_, 2;
if (defined $value) {
$value =~ s/^$_(.*)$_$/$1/s for qw(" ');
}
$hash{$name} = $value;
}
close $fh;
# テスト出力
use Data::Dumper;
print Dumper(\%hash);
print "$hash{BBB} is a value of BBB\n";
# 初心者の学習には丁度いいかも。車輪は既にあるけれど。
# でも質問はもうちょっとやりたいことを整理して、伝わるように書いてね。^^;
666 :
ken :2006/08/21(月) 00:16:36
>>665 さん
>>664 さん回答ありあがとうございます
とてもよくわかりました
助かりました、心から感謝します
埋め込み(というべきか組み込みというべきか)について質問。 perlembedのMaintaining multiple interpreter instancesの最初のほうの例に 従いつつ、ExtUtil::Embedでperlxsi.c作ってperl_parseにxs_initを渡したんだけど、 二回目のperl_parseで「ハンドルされていない例外が発生しました」ってなってしまう。 なんでだろうか?
>>665 こういう要求されても無い汎用性をゴンゴン詰め込んだコード見ると
アホだなぁって思う。
目的と方法のバランスがめちゃくちゃ。
>>667 USENET行け
別に 665 くらいのコード書いてもいいんじゃないか。 言うほど凝ったコードでもないだろう。
670 :
665 :2006/08/21(月) 02:32:17
>>669 そうだそうだ。むしろもっと書かせろ。w
663のやろうとしてる事をちょっと考えてみれば、 BBB="CCC"なんていうデータ構造がそもそも間違ってる事に容易に気付くわけで、 それをスクリプト側で過剰にフォローして、メンテナンス制の低い コードを量産するような行為は愚かだ、ということ。
672 :
665 :2006/08/21(月) 03:47:30
>>671 なるほど、もっともだ。
ただし僕は 663.txt (仮名) を外部リソースだと判断したので as is 扱いにしたのね。
「自前のデータファイルの解析方法を教えてください」はなんぼなんでもないだろう、と。(w
…ここの質問者を甘く見てたってことなのかそうなのか。
いわゆるWindowsアプリでよく使われるiniファイル形式だよね? これって絶対誰か車輪作ってるよね?
車輪はいくらでもあるんだろうけど、正式なフォーマットはWindowsを 解析した人しかわかってないからフォーマットにいろんな方言があるよね。 このフォーマット自体はAPIを叩くだけで簡単に使えるけど。
>>653 同時に2つ動かすと重なる危険があるよ。そういう使い方は絶対しないのなら
そのぐらいの手抜きでもいいけどね。
appconfigとconfig::inifile(どっちもうろ覚え)
みなさんはプログラムをperlで作る時、何を使っていますか VCならVisualC++とかJavaならEclipseなど定番のソフトがありますが、 perlならこれ、といったソフトは聞きません とりあえず今はサクラエディタを使ってます みなさんもテキストエディタを使っているのでしょうか というのも、Catalystを勉強しようと思った時に、コマンドラインで 開発しなきゃいけないような感じがしたので、Perlってそういうもの なのかなあと疑問に思ったんです
そういうもの。
679 :
デフォルトの名無しさん :2006/08/21(月) 17:40:27
EclipseでPerl開発するパターンもあるのでは・・ 1.EasyEclipse for LAMP 2.Eclipse ver 3.1 + EPIC[Perlプラグイン] + PadWalker[Win用モジュール] 3.Aptana + EPIC[Perlプラグイン] + PadWalker[Win用モジュール]
自分、素人で、勉強のためにこのスレをのぞいているんだけど、 コーディング:PSPad デバッグ:PerlIDE みんな何を使っているんだろう。
viとprintに決まってる
僕は JVim と愛用のコマンド一式。典型的なツールボックスアプローチだけど、ぼちぼち時代遅れかもなあ。
cperl-mode on Emacs って人も結構見かける。
ActiveState の売り物で PDK ってのがあるけど、誰か愛用してる人いたらコメント欲しいな。
見た目は悪くなさそうな感じで興味はあるし。貧乏だから自分では使わないだろうけど。(涙
>>681 cat と ed じゃなくて? ;-)
Emacs Perlのプログラミングにemacsを使うというより、 いつもEmacsの上でゴロゴロしているのでPerlも Emacsという感じ。
おれvimだね!
複雑怪奇なGUIアプリ組むわけでもねぇのにIDEってそんなに必要なの? emacsでコーディングして, perl -cwでシンタックスチェックして, perl -dでデバックで十分じゃね? なにをすればそんなにperlのコーディングにIDEが必要なの?
Subversion連携みたいなチーム開発向け機能とか? ごめん、IDE使った事ないけど...
>>686 それも別にIDEじゃなきゃできんことでねぇし。。。
普通にコマンドラインからで十分じゃね?
むしろ細かいオプションとかつけたいからおれはそっちでないと困ること多いし。
単純にWindowsユーザが多いから
GUIで見た目の先入観でとっつきやすそうというのと
英語が読めない奴がドキュメント読めなくて
日本語書籍でHowTo情報が扱われているからがそっちに流れてくってことでしょ。
ぶっちゃけJavaもPerlもコーディングは文字コードと改行コードが変更できる
テキストエディタであればemacsでなくても十分。
requireについての質問です。 ----hoge/test.pl require "hoge.pl"; ----hoge/hoge.pl print "HelloWorld"; とあったときに、 hogeディレクトリではなく、下のディレクトリから、 > perl hoge/test.pl とすると、 Can't locateと言われてしまいます。 これは仕様でしょうか・・・。
仕様です。 @INCに、自動でhogeディレクトリは入りません。
>>685 ,687
そう力むなよ。
選択可能な別のやり方が常にあるのは幸せなことだ。
There's more than one way to do it. だろ? ;-)
実際業務命令でもない限り、不便な物を我慢して使い続けるような堪え性のある Perl 使いを僕は知らんので、みんなそれぞれの用途で便利に使ってんでしょ。
もし本当に具体例に興味があるなら使ってる人間を問い詰めてくれ。w
>>688 use lib とその関連情報を当たりましょう。
書籍なら「続・初めてのPerl」(Learning Perl Objects, References, and Modules) を読めばその辺りの理解が深まるでしょう。
プログラムの長さによってエディタ変えてる。 短いものはワンライナー。 1, 2ページならvi。 それ以上はemacs。
使ってないなぁ。 個人的には Devel::PerlySense が気になるんだが、もう止まってるんだな。
696 :
デフォルトの名無しさん :2006/08/22(火) 17:39:17
たしかに説明不足なのでよくわからんね。あてずっぽうで こんな感じでいけるみたいだが。 use SQL::Abstract; my $sql = SQL::Abstract->new; my($stmt, @bind) = $sql->select('hoge', '*', undef, ['foo desc']); print $stmt, "\n";
698 :
696 :2006/08/22(火) 18:18:13
>>697 迅速に解答していただきありがとうございました。
助かりました。
本当にありがとう。
699 :
デフォルトの名無しさん :2006/08/22(火) 19:17:04
use strict; ↑こいつは何をしているんですか? myやらlocalとかいうのに関係しているのはわかったのですが 未だに何だかわかりません
,-,,,,、 ,-,,,,_ ,,,,,,,、 ,,,,,,_゙'-,. "'i、 .,,,,,,,、 ,,,,,,,゙'-、^'i、 .i,¬ー-、 ゙''i、`\ \.`''-\,,l゙ `'i、 `''i、 ‘'-,`''-\,,l゙ ^'i、 ,) 丿 ,l,_,,,,,,,― |i、 } 丿 Z_,,,,,,-ヘヽ、゙l | .| __ ,/ ,,-----=@,,,7゙"` ,/ ,,-----=@,,,)゙″ | | .,,-'",,,,,,、`'i、 ,/`./ / 丿 / .,/` ,l゙ 丿 |゙ヽ,,,―" `゙'ュ‐゙_,/゛ | | .,/.,,/` /` 丿 ,/ ,/ ,/ 丿 \,,,,-‐,! '`,/ .| l゙ ,,-",,/ 丿 ,i´ ,/_,/ 丿 ,i´ 丿 ,,,i´ ,! | i彡‐" ,/` ,/` ィ,ン'" / ./ ,/ .| | | ,,i´ ./ ,,‐`./ ,/`.,┤ | | | ./゙| .,/ .,/ ,/ .,/ / 丿 | .| { { .,/ ,l゙ ,,/ ,/` ,,/ ,/` / ,、゙'-,| l゙ | }, ._/.ノ _,/゙,,/゛ _,/゙,,/゛ l゙ .,/`\ | ヽ,_ ゙"゛,,/ (ン'"゛ (ン'"゛ `″ ゙l 丿 `゙゙゙゙゛ ゙'"`
>>700 「ググる」を使うとGoogleの中の人に怒られちゃいますよ><
>>700 は明らかにGoogleがよしとしない「検索サイトで調べろ」という“一般動詞的な用法”で
「ググれ」と書いてると思うが。それにしても、一般動詞化なんて最高の褒め言葉なのになぁ。
ってスレ違いごめん...
wakatono居る?
ウォークマンの商標の例を見たら、最高の褒め言葉じゃ済まんだろう。 褒め言葉じゃ金にならんし。
母ちゃんにかかれば、プレステだろうがゲームボーイだろうが全て「ファミコン」か「ピコピコ」ですよ!
いいなぁ。全部ピコピコ。 親クラスって言うんだろうか。
>>699 strict プラグマは犯しやすい間違いと、失敗を誘発しやすいいくつかの手段を制限します。
実際には、「完全修飾されないパッケージ変数と未宣言の変数」、「シンボリックリファレンス」、「bareword」 の 3 種を禁じます。my に関係してくるのは最初のやつですね。
このプラグマは、開発の序盤から使うという条件付きながら、プログラミングの効率を高めてくれます。
ありがちな間違いの可能性の多くをコンパイル時に教えてくれるからです。これによって不可解な実行時エラーや、厄介なセマンティクス上の不具合に悩まされる回数が減ります。
お手元の環境に Perl があれば perldoc strict に目を通しましょう。Web でもたくさんの解説が見つかると思います。
また、せっかく興味を持たれたなら warnings プラグマについても調べてみてください。
味の素、宅急便、マジックテープ・・・ ついつい他と区別せずにつかってしまうな。
>>699 おまえはstrictという英単語の意味も知らないのか?
知らなくても辞書を使って調べるという発想/能力もないのか?
そもそもperlの事なのにperlについてくるドキュメントをなぜ読まない?
perldoc使えないのか?
コマンドラインからperldoc -hさえ出来ない低脳か?
use strictは正しい英語じゃないよね、
何言ってんだお前
>>711 オマエは日本語もできねぇのか!?
710は「use strict」という英語を調べろと書いてねぇぞ
「strict」という英単語を調べろっていってんだろ。
perlの文法が英文法だと勘違いしてる馬鹿がこのスレにいるのに絶望した。
>>711 おまえはもう書き込むな。一生ROMってろ
>>703 あれってCNETの日本語の記事がアンポンタンな気がするが、
英語だと「グーグル」も「ググれ!」も"google" "google!" と同じであり、
"to google someone!" みたいな使われ方をするのがダメなのであって、
日本語みたいに動詞、命令形が商標とかぶらない場合は問題ないと思うのだが。
ってか英語でも google って動詞になってるのかw すごいなー日本だけじゃなかったんだなー
ま、グーグルの意向なんてどうだっていいけどな。
どうでもいいんだったらくだらねぇ負け犬の遠吠えレスすんな
質問です。 通常は、readdirで取得できるファイル名のリストの順番はソートされているのでしょうか? CentOS4.2 Perl 5.8.5ではバラバラのリストが返ってきますが coLinuxに入れた CentOS4.3 Perl 5.8.5ではソートされたものが返ってきます。
>>721 お試しの通り、まるで保証されません。
特定の環境下での結果は当てになさらないほうが良いでしょう。
use strict;は
use strict "vars";
use strict "refs";
use strict "subs";
の略。うえの書き方ならある程度意味の察しがつくだろうね。(英語がわかれば
perlはたいてい可能ならば英文法に似せるように努力してるよ。
それがlarry wallとかperlコミュニティの人たちの趣味だから。(最近はto dwim itという動詞ができてるw
括弧がほとんどの場合省略可能なのとかも、英語"みたい"に書ける
ことがいいことだって言う考え方の表れだと思うし、・・・
その辺のニュアンスが理解できない、あるいは賛成できない人がperlコードは見るだけでキモイ
といってるんだと思うけど・・・
まあ、そういう人のためにはpythonという選択肢があるわけで、世の中ちょうどよくできてる・・・w
つーか
>>712 >>713 >>714 は市ね
724 :
721 :2006/08/24(木) 02:42:50
725 :
721 :2006/08/24(木) 02:43:23
>>723 >>719 もじゃない?
たまにこういう面白いのが出てくるからこのスレは好きだ。
…昔はPerlに関する興味深いやりとりがあって好きだったんだけどな。
負け犬の遠吠えレスした奴が恥の上塗りか。 醜いんだよ。 ここはperlのスレでgoogleについて語るスレではない。 >…昔はPerlに関する興味深いやりとりがあって好きだったんだけどな。 googleのブランディングの話がperlに関する興味深い話なのか? 雑談なら他所でやれ。
なんだかカリカリしてる人がいますね
>>727 英語がどうとか言って日本語がわからなかったのか、きみはw
おまいらキチガイ相手にするなよ。
IDが表示されないからって 今の時間帯に短時間にレスしてると自作自演がバレバレですよw 自分の気に入らないレスがついたからって710とかに粘着しても貴方の低脳さはかわりませんよ。 関係ない話でperlスレを荒らすくらいなら雑談スレに言ってください。
>>734 IDが表示されないからって
今の時間帯に短時間にレスしてると自作自演がバレバレですよw
>>732 おまえこそどこか言ってください
言ってください
Perlとperlの区別もつかないようなやつ相手にするなよとまた荒れそうなことを言ってみるか。。。
PERLじゃなきゃなんでもいいじゃないか。 ちなみにpearlはまた別の言語。
740 :
732 :2006/08/24(木) 07:33:54
どこにも言かねーよ!
騙り乙。
皆何してるの(;´Д`)
743 :
732 :2006/08/24(木) 09:09:29
>>726 読んでて気持ち悪いから自作自演を忠告したら
今度は俺になりすましたりしての粘着かよ
おまえら暇人だな
>>726 の北朝鮮のコラ写真並みの自作自演・成りすまし技術に仰天
劣勢になったら自分の書き込みを人のせいって('A`)...
748 :
732 :2006/08/24(木) 09:41:10
正直すまんかった
次からは気をつけような。
. 、、、 , , _
,. -┬i^i、._ ィ`,、,、,、,、,.、'、
. / | | .|=ゞ=、 __l/\ v~/!|
l. l l l \\{f‖ミゞ, ,ィ≪:lf^i
>>726 もういい…!
/ヽ. ノ「,ト、「.lヘ‐iヾ|rー~r〉〉,こlレ' もう…
/ `ヽ//| ト、ヽlイ| |/|{王王王王}ト、 やめろっ…!
| レニ| lニゝ冫! l!L_, , ,ー, , , ,_」シ’、 おまえの自作自演はみんなにばれてるんだ…!
ヽ __|ーL|┴^ーヽ>'^ヾ二三シ´\\ これ以上自分を貶めるな。
,ゝ,/ .}二二二二二二二二二lヽ. ヽ \ オマエは十分戦った。
l/ |ト、./´\ ||. レ'´ ̄`ヽ
|| ! 、\ ||. / :|
|| |.l l゛!.|i |ヽ) |l/ /
|| `ヘ)U'J /-─ ,イ.|
|| _ /-─ / ヽ|
|| r‐-゛=っ`ヽ,.--r-ー ''"´ ̄`ヽ / }
||. {三二 | │ / /
||. ヾ=--一'`ーゝ _,. く ノ|
お前いつ寝てるんだ?
>>751 反論できなくなったらAA貼り付けってwww典型的な厨房行為だな。
754 :
726 :2006/08/24(木) 10:30:50
ニートだから2chかきこのあいまにネてます
うはwwwwwwwwwwwwwwwwwwwwww おkwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwっうぇwwwwwwwwwwwwwwwwっうぇええwwwwwwwwwwwwww
喧嘩・口論はスレッドの内容に反します。 喧嘩・口論板でやりましょう。
760 :
726 :2006/08/24(木) 10:38:27
763 :
732 :2006/08/24(木) 10:39:43
764 :
726 :2006/08/24(木) 10:40:49
なりすましやめろよ
765 :
726 :2006/08/24(木) 10:41:40
俺が本物だって
726騙ってるのは多分全部
>>719 だな、
粘着してるのがどっちかバレる書きこみも出たし、そろそろ終りにしてはどうだ?
喧嘩・口論板でやりなさいよ!!!(`へ´)
>>766 誤解されてるみたいだから言っておく。
>粘着してるのがどっちか
っておれ一人で煽ってたわけじゃないです。
770 :
ひみつの検疫さん :2024/12/23(月) 14:54:14 ID:MarkedRes
汚染を除去しました。
>>769 これでやめるけど、最後のほうはほとんど煽ってなかったことを言い訳しとく。
じゃ。
>>768 煽ってたなら同罪です
喧嘩・口論板に行ってください
773 :
デフォルトの名無しさん :2006/08/24(木) 10:49:16
774 :
デフォルトの名無しさん :2006/08/24(木) 10:57:23
┐(´ー`)┌
>>773 おなじこと言ってるほかの奴もそうじゃない?
しかし何で喧嘩口論板なんだwww
" ,, --''"ニ_―- _ ''-,,_ ゞ "-
/ ,,-",-'i| .|i''-、 ヾ {
./ i {;;;;;;i| . |i;;;;;;) ,ノ ii
l, `'-i| .|i;;-' ,,-'" _,,-"
,,,,-'--''::: ̄:::::::'';;-==,_____ '" _,,--''"
':::::" ̄: :::::: ;;;;--;; ;;::::`::"''::---,,_ __,,-''"
-ニ--''" ̄.i| ̄ .|i-----,, ̄`"''-;;::''-`-,, __
.--i| .|i _, '"´ `丶
''"'' --- i| . |i / \
. i| |i ./ ,' / / / ヽ `ヽヽ
__ ____i| .|i--__,,--- ,l l j __ // ,イ 、ハヽ }! ハ
""''--;;i| .|i二;;;;;::--,,l l 「 j_从7ヽハ !七大 ` } リ }/
.i| .|i '| l Vf゙i圷/ jl ノィアト、ヘ// /
.i|
>>701-776 |i . j l l V_:ソ ´ V:リ /jイノ
. i| ノ::::i:::トiヽ、_.|.|i ,' ハ ヘ. ' ` ,' l !
. i|"ヽ/:iヽ!::::::::ノ::::|i / / l ヽ ー ‐ .厶 |ハ
::::::::/:::::|i/;;;;;;/::::;;;;ノ⌒.//' ∧ 弋ト 、 __ , r<7 l ヽ
/ / / ∧ Vー、 Kヽ{ 'ヽ ヽ
./ /./ /¨:.} ',__∧_j_l::::ハ \ } /
. ,′ l { /: :::/ /::::ヾ ☆Y:::ハ X
. { . V r' ::::::::/ /::::::::::\__j:::::入xぅ/ \
ヽ l { ::::::/ /::::::::::::::::::V://∠ ',
} ! j::/ /:!:::::::::::::::::::∧V _二}:ヽ /
/ / {( 〈:::::::l::::::::::::::::/:| j/ -ーソ:::ノ /
/ / |::ヽ \:::l::::::::::::/∠/j rテ':〃 ( ヽ
おまえらホント暇人だな。仕事しろよ
このスレ、avast!さんが反応するようになった。
avast使ってるけど反応しないな
このやり取りを Perlでコード化できるかな? whileと連想配列でシンプルに行けそうな気も。
YAPC::Asia 2006 Tokyo Perl Best Practice / Damian Conway 効率的で見やすくメンテナンスしやすいコードを書く具体的な指針 # ラベル付き引数を使え。 # $_ は使うな。 とありましたが、ラベル付き引数というのがいまいちわかりません。 どなたか、具体的な例を挙げてくださらないでしょうか。
subroutine( Name => 'デフォルトの名無しさん', . . . )
あぁ そういうことか 「関数に複数引数がある場合はSCALARやARRAYじゃなくてHASHにしろ」ってこと
アッー!
誰か「まるごとPerl Vol.1」買った? 週末にでも買おうと思うんだが、感想を聞きたい。
789 :
デフォルトの名無しさん :2006/08/25(金) 03:18:23
perlの手品師まがいでトリッキーな糞文法をどうにかしてください。
無理
たとえば、どういうのが糞文法なの? perlって書き方たくさんあるんだから、 キモくないのを選択することはできないの? それとも自分で書く分には問題ないけど他人のコードが 読みづらいということ?
自分の理解外の概念を人は安易に批判するものである。
>>789 バ〜か
>>789 > perlの手品師まがいでトリッキーな糞文法をどうにかしてください。
どうにもならないから、別な言語を使うといいよ。
Perlを批判する人は大抵UNIXやShell Scriptを知らないことが多い。
そういう奴らは.NETいじってろって
UNIX系のシステムは、最近Perlを排除しつつあるからな。
>>796 具体的にどう排除されつつあるか説明してみ、嘘吐き
Perlほど非UNIX的なものもないからなあ。
/l、 (゚、 。 7 ハァ? なにいってんのオマエ l、 ~ヽ じしf_, )ノ
煽り耐性なさすぎワロタ
だまれボケ!おまえのハートに火ぃつけんぞ、コラ!!
ツールキットアプローチに反するという件だな。 わたしが知っているのだと、FreeBSDがシステムまわりからPerlのスクリプトを一掃したな。
「依存をなくした」と「排除した」を混同してるだけか
感想を聞けば誰かが書いてくれる そう思っていた時期が猫にもありました
ここはひどいインターナショナルですね
807 :
デフォルトの名無しさん :2006/08/25(金) 14:36:56
808 :
デフォルトの名無しさん :2006/08/25(金) 17:54:46
>>808 単なるPerlとJavaServletの違いがわかるか?
810 :
808 :2006/08/25(金) 17:59:50
>>809 上からPerlでやるようにいわれているのですが、
Perlではできないのですか?
811 :
808 :2006/08/25(金) 18:04:26
>>809 すみません。
あとプログラミング歴が浅いのでJavaServletに関する知識がありません。
もしPerlでできないのなら、その理由を教えていただけるとありがたいのですが。
>>811 PerlやServletがどのように動作しているかについては自分で調べて下さい。
分かれば解決します。
>>811 「JavaServlet」の意味を調べて、
>>1 をよんでWEBプログラミング板に行くといいんじゃね?
814 :
808 :2006/08/25(金) 18:11:16
>>808 なんかお前が後輩の気がしてきたぜwwww
FedoraCore4でPerlを使っています. rand()を一度だけ呼ぶのを何回か実行する場合, その乱数は品質的にどうなのでしょうか? 実際には randを使うPerl 別のプログラム randを使うPerl のように繰り返して実行したいです. 別のプログラムはそれなりに時間がかかります. こういう場合Seedは何がよいのしょうか?
>>816 適当なシードの決定については srand() のマニュアルに書いてあるよ。
乱数生成にハードウェアの支援は受けていないのかな。あるいは受けてもたいして改善しない?
俺用語の「ハードウェア支援」が何を意味するかエスパー解釈になるわけだが、 /dev/random あたりに頼れば飛躍的改善が図れる場合がある。
俺用語でもなんでもない。普通に分かるだろ
822 :
デフォルトの名無しさん :2006/08/26(土) 02:18:41
/dev/hwrandom
普通に分かっても俺用語は俺用語な罠。
Perlで明示的にメモリを確保するにはどうすれば良いのでしょうか?
my @arr; $arr[100000000]=undef;
828 :
824 :2006/08/26(土) 17:03:26
喧嘩を売ってるのでしょうか?
829 :
デフォルトの名無しさん :2006/08/26(土) 17:06:25
うんそうだよ。だから何?
831 :
824 :2006/08/26(土) 17:17:45
ここは酷いインターネットですね 二度と来ません
832 :
デフォルトの名無しさん :2006/08/26(土) 17:19:45
180円になります
>>831 \ ,, -―――- 、__
Y´ `ー 、 )
ヽ__, / \ ノノ
二 こ / // / / 、 ヽ_/ノ
度 ん レ / / // | i iヽ- \
. と な Y / /// /i | i ! \ \ト、\
. 来 糞 \/ //./ // || |. | ヽ \\ヽ
ま ス /| ヘi/ ////|| i ハ. |ヘ ヽ ヽ}
せ レ /||_ヒ=ミ、/// !|/! /| i ! ) ヽ 丿
ん /!ヾン⊃ヽゞメ- ////_.|_|__/i /∧ Y
か .!| i\_ .ノ //,≠=メ.ノ/|/// |/
. ら | i |.  ̄ /ー')Y//|// 丿
っ | | ! r― 、 , ヽノ // |/.イ
フ- 、 !i Y `ー, /|/ | / !
´ ̄ '7>ー、_ .,-、.ヾ i ト、_ _/ ノ || i ハ .\
. _'彡イフ´: : : : \|| | \ .ト、._ ̄,.. イ| ||. !| | |. \ \
/: :/:/: : : : : : : : : Y |\ \ / // / !| | .レ| \ \
: : |: :/: : :/: : : : : :ノ /\. \i /ノ i /ノ レ i \
: : |:/: : : :!: : : : //: : : :\ヽヽー'´ ノノ_, ソ´ ヽ
: : !: :,-―==- '´: : : : : : : :i i Y\ ̄ \
: :イ: : : : : : :\: : : : : : : : : :) |丿 ! ば \
: :/: : : : : : : : : :\: : : : : : : i i | /
: :!: : : : : : : : : : : : : : : : /: : | ノ /| | /
: : \: : : : : : : _: : : :,/_丿! / /| /
: : : : \ー 、__人 ̄/V // ! //| か /
: : : : : : :Y´ / とー2ノ ヘノ |//ノ !
: : : : : : : ´7‐ヘ┘ |ヽ i |/-っ ! |
: : : : : : : : : : : :| i ´―― 、. |
2つください
"aaa bbb"という文字列をファイルから読み出したとき aaaは$oneに入って、bbbは$twoに入って、真ん中の空白は捨てるには どういう風に代入したらいいでしょうか?
split
ありがと
8ビットとか16ビット幅でのビットローテートをしたいんだけど perlらしいスマートな書き方ってありませんか?
どっかの大学生か専門学校生が夏の宿題の答えを探しに来てるのか
>>840 いや、そうじゃないよ。
必要に迫られて書いたんだけどどうにもスマートじゃないなと思ってね。
8ビット左方向を今はこういう風に処理してるんだけど、もっといい方法ない?
sub bit_rotate_8L {
my ($v, $n) = @_; # 初期値, 移動量
$v = 128 << $n;
$v & 255 | ($v & 65280) >> 8;
}
842 :
デフォルトの名無しさん :2006/08/27(日) 00:03:52
use LWP::UserAgent;
#atai
@pic = { ahi/rame.png , uhu/ramee.jpg};
$server = "chan.example.com";
$dir = "2d";
foreach $filename (@pic) {
($dir2,$picname) = (split /\// , $filename);
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)');
my $req =
HTTP::Request- >new("GET", "
http://$server/$dir/$filename ");
$req->referer("$url");
my $res = $ua->request($req);
if ($res->is_success) {
$content = $res->content;
open(binmode FILE, ">$picname");
print $content;
close( FILE );
print"downloaded:$picname\n";
}
}
ビープ音がビービーなります(;´Д`)たすけてください
843 :
デフォルトの名無しさん :2006/08/27(日) 00:06:11
初めの配列の書き方が間違っていますが読み替えてクダサイ 画像をファイルに保存したいのですが binmode というのを付けたら ビープ音が酷く鳴ります 外すと 壊れた画像ファイルが出力されます
FILE開いたんだから print FILE $content; にしろ
openしてからbinmode。 今のだとopenする前のファイルハンドルに対してbinmodeしてる。
open(FILE, ">$picname" ); binmode FILE; print FILE $content; close( FILE ); print"downloaded:$picname\n"; 正常に動作しました アリガトウゴザイマシタ。
>>841 $v = ( $v <<= $n % 8 ) & 255 | $v >> 8;
>>847 ぅぉ、レスあきらめてたんで嬉しいです。
なるほど〜、合理的ですね… 美しいです。
ありがとうございました。
2つくださいワロタw
850 :
デフォルトの名無しさん :2006/08/28(月) 01:14:39
perlでファイルシステムの全容量、使用容量、残りの容量を取得することって可能でしょうか?
system("df -H");
ワロタ
`df -h`; -k でもいいけど
854 :
850 :2006/08/28(月) 02:10:55
やっぱそれしかないですかねぇ。 df /filesystemで第2-4フィールドを取得すればいいのかな。 Filesystem名が長い場合は2行になるから1行にしてからだなぁ。 でもdfの表示の仕方ってプラットフォームで違いますよね?
>>850 Filesys::DfPortable
>>855 気違いみたいになんでもあんのな。CPAN て。
>>856 どれもこれも中途半端だったりするけどな。
中途半端な人間に中途半端といわれる屈辱
>>857 同じことをやるモジュールがいくつかあっても、みんな同じところが中途半端だったりするのな。
>>850 Filesys::Df
Filesys::DiskFree
Filesys::DiskSpace
Filesys::DiskUsage
861 :
bobo :2006/08/30(水) 00:09:12
PDFlib を使うperlでも質問していいですか?
863 :
デフォルトの名無しさん :2006/08/30(水) 03:29:19
>>862 っ[POE]
っつ〜か、生Socketで200行ないコードでhttp proxyを作って使っていて
存在を忘れるほど安定動作していたことがあるけどな。
LWP::UserAgentの通信路をノンブロッキングにしてSelectることはできんのか?
おや、LWP::UserAgentと
HTTP::Daemonを使ったHTTP::Proxyというのがあるぞ 。
でもって、LWP::Parallelというのもある。
864 :
デフォルトの名無しさん :2006/08/30(水) 03:31:44
865 :
862 :2006/08/30(水) 21:37:07
POEを知らんのか?
$foo = '[foo] [bar][hoge] piyo [fuga]'; 上の文字列から下のような配列を作成したいのですが @foo = ('foo', 'bar', 'hoge'); どう書けばいいかわかりません。 条件としては、 1. 文字列の先頭には [ と ] のペアでで囲まれたものが複数個(0個を含む)含まれている。 2. それぞれの間には空白文字が入ることもある([foo]と[bar]の間のように)。 3. 0個の場合は空の配列を返したい。($foo = 'foo';なら@foo = ();としたい) 4. 1個以上の場合は [ と ] で囲まれたものを抜き出した配列を返したい。(最初の例) 5. 途中に [ と ] で囲まれない文字列(上記の場合はpiyo)が含まれていて、 そのあとにまた [ と ] で囲まれた文字列(上記の[fuga])が来ることがあるが、これは返値の配列に含めたくない。 sub getCategory { my $f = shift; my @c = (); while ($f =~ /^(?:\[.+?\]\s*?)*?\[(.+?)\]\s*?/g) { push @c, $1; } return @c; } 自分ではこのような関数を書いたのですが、これだと最初のfooだけしか取得できませんでした。 長くて申し訳ないですが、助けてくださると幸いです。
sub getCategory { my $f = shift; if ($f =~ /^((?:\s*\[.+?\])+)/) { return $1 =~ /\[(.+?)\]/g; } else { return (); } } とか?
push @c, $1 while ($f =~ s/^¥[(.+?)¥] *//);
sub getCategory { my $f = shift; my @c = (); while ($f =~ /\G\s*\[(.+?)\]/g) { push @c, $1; } return @c; } こう?
872 :
bobo :2006/08/31(木) 00:56:27
pdflibを使って 読み込んだPDFが横だったら縦に変えるプログラムを作ろうと思うんですが 考えがおもいつきません、わかる方よろしくおねがいします
>>872 pdflibってどういうのか全く分からないけど、
perl用の追加モジュールをダウンロードして少し見てみた。
PDF_rotate() ってのがあるみたいだから、それを使えば?
その関数があるっていうのが分かっただけ。
肝心の部分はバイナリ配布でマニュアルが無いから、それ以上は分からない。
どうしてもそれを使うなら、配布元の会社に問い合わせた方が良い。
サポートでメール受け付けてるみたいだし。
>>868 sub getCategory {
my $f = shift;
$f =~ s/^\s*\[(.*)\](?>\s*)[^\[\s].*$/$1/
? return split /\]\s*\[/, $f
: return;
}
>>875 参照渡しじゃないんだから破壊ってのは違うような。
TMTOWTDIで色々な書き方が見れて面白いね。
878 :
デフォルトの名無しさん :2006/08/31(木) 06:32:17
my @c = $foo =~ m/\[([^\]]+)\]/g; my @c = (); while( $foo =~ m/\[([^\]]+)\]/g){ push @c, $1; }
879 :
878 :2006/08/31(木) 09:28:50
最後まで読んでなかった。間違い ><
push @c, $1 while $foo =~ /\G\[(.+?)\]\s*/g;
あ。こっちでいいのに>< my @c = $f =~ /\G\[(.+?)\]\s*/g;
### perl 5.6 以降。 my @data ; my $flag ; $foo =~ /^(?:\s*\[(.*?)(?{ $data[$flag] = $1 })\](?{ $flag++}))+/ ; ### perl 5.8 以降。 my @data ; $foo =~ /^(?:\s*\[(.*?)(?{ push @data, $1})\])+/ ; # いざ使う場合になったらもちろん 881 氏の手を使うw
883 :
878 :2006/08/31(木) 12:16:31
$_ = '[foo] [bar][hoge] piyo [fuga]'; my @c = (); my $f = 1; while(1){ if(m/\G\s+/gc){ #skip } elsif (m/\G\[([^\]]+)\]/gc){ if($f == 1){ push @c, $1; } else { $f = 1; } } elsif ( m/\G\w+/gc){ $f = 0; } else { last; } } print "@c"; こんな感じかなぁ
\Gとか久しぶりに見たわー
885 :
868 :2006/09/01(金) 01:01:13
回答していただいた皆さん、ありがとうございます。 今回は881氏のコードを使わせていただきました。 皆さんのさまざまなコードには、私が普段使っていないので 理解できないコードも多いですが、少しでも理解できるよう努力したいと思います。 もういちど、ありがとうございました。
WEB、コンソール、cronのいずれからPerlが実行されたのかプログラム側で知りたいのですが if (-t) { print "コンソール"; } elsif (exists $ENV{REMOTE_ADDR}) { print "WEBかも"; } else { print "CRONかな"; } よりももっと正確な判別方法はありませんでしょうか。
perlスクリプトの中に、ディレクトリ内のファイル数を数える、という操作を入れたいのですが、どうすればいいでしょうか ls -l|wc -l の結果を変数に格納、みたいなことができればいいのですが
perl -e 'opendir(D,"."); $_ = grep -f, readdir(D); closedir(D); print'
889 :
887 :2006/09/01(金) 12:51:31
>>888 漏れへのレスっすかね?
難しくてわかんないっす。でも一応サンクス
普通に$num = `ls -l|wc -l` で事故解決と相成りますた
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ 889 名前:887[sage] 投稿日:2006/09/01(金) 12:51:31 | |r┬-| | >>.888 \ `ー'´ / 漏れへのレスっすかね? ノ \ 難しくてわかんないっす。でも一応サンクス /´ ヽ 普通に$num = `ls -l|wc -l` で事故解決と相成りますた | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // webprog板でやれおwwwwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
893 :
862 :2006/09/02(土) 18:10:20
>>865 いろいろ教えていただいてPOEを使ったProxyが出来ました。
(ほぼPOE_Cookbookに載ってたサンプルそのまま。)
新たな問題が出てきたので、お知恵を拝借いたしたく。
作成したproxyで、サーバから得たHTMLを加工してから、ブラウザに返したいと考えています。
特にHTTP/1.1のchanked転送について、
POE::Component::Client::HTTP では、chunked転送に対応していないらしく、
HTTP::Response を $response->content_ref などとして参照すると、chanked転送の
16進のボディサイズが含まれています。
HTTP::BODYなどで取り除けるかと思ったらこちらもchunkedには対応していませんでした 。
HTTPクライアントを作成されている諸先輩方は、どのように対処されているのでしょうか。
やはり、ボディサイズ分バイナリで読み込み、再構築するしかないのでしょうか。
よろしくお願いいたします。
894 :
867 :2006/09/02(土) 19:58:27
>893 すみません、質問に質問で申し訳ありません、 http proxyを作る意味を教えて下さい。 クライアントPC上でproxyも立てるのですよね? IPアドレスを変更するためなのでしょうか? すみませんが、宜しくお願いします。
896 :
867 :2006/09/02(土) 20:01:40
proxy は、いろんなことに使える。 作る目的は、いくらでも見つかる。 例えば自分が今一番欲しい proxy は、XHTML で書かれているページの head 内で定義されている CSS をカットして、ローカルの handheld メディアタイプの CSS に差し替えるコンテンツ変換 proxy。 Nintendo DS ブラウザで見やすいようにって感じで。
898 :
デフォルトの名無しさん :2006/09/02(土) 20:28:26
>897 ありがとうございます。 なるほど、 DS------PC(proxy)-------Internet として、途中で加工するわけですね。 なるほどです。 私はIPアドレスの偽証くらいしか思いつきません(笑)
>899 ありがとうございます。 陳腐なアイデアですが、、 考えました。 proxyサーバがもしダウンした際に、 暫定のproxyにするということができますね。 クライアントは何の変更なくwebを使えます。 で、復旧したら切り替えると。 アイデア勝負ですね。色々と考えてみます。
902 :
862 :2006/09/02(土) 23:44:41
>>895 proxyを作る理由ですね。
大まかに言うとページに埋まってるFlashやwavなどを取り除くためです。
何度も見たくないものを押し付けられているようなので、取り除いちゃえ!て軽い気持ちで作ってます。
こういった題材があると自分の勉強にもなるし、結果が得られればその後も満足出来て一石二鳥だと思います。
>>896 867さん、情報提供ありがとうございます。
なにぶん不勉強なもので、大変参考になります。
今度はフィルタにチャレンジしてみます。
>>897 DS用proxyってのもいいですね。いろんなタイプのサイトがあるので、一般化するのが難しそうですが。
携帯用i-monaの発想に近いでしょうか。
>>900 さんが言うとおり、まさにアイデア次第ですね
おみとろん(ry
privoxy使えばええのになぁ。正規表現もpcreだし。
905 :
862 :2006/09/03(日) 02:32:09
>>903 >>904 こんなソフトがあるのですね。知りませんでした。
今回はperlの勉強もかねているので、もう少しがんばってみようと思います。
ありがとうございます。
906 :
897 :2006/09/03(日) 03:23:48
>いろんなタイプのサイトがあるので、一般化するのが難しそうですが。
>>897 で、あえて XHTML と書いたのは、論理マークアップの浸透度合いが高いと思われるからです。
XHTML strict で table エレメントによるレイアウトを行っているサイトを探す方が困難かと思うので、XHTML strict あたりを狙い撃ちにすれば、一般化まで考えずとも CSS 差し替えだけで、とても見やすいサイトになると思います。
>>905 プロクシができたらどこかにうpしていただけると非常にありがたい
>>907 > プロクシができたらどこかにうpしていただけると非常にありがたい
なんで?
dos2unix, unix2dos の代替物として、以下のようなワンライナーを使用しています。 (dos2unix) perl -pe 'BEGIN { $^I='' if -t } s/\r//' (unix2dos) perl -pe 'BEGIN { $^I='' if -t } s/\n/\n\r/' 文字コードのことはよくわからないのですが、このような単純な置換で UTF-8, EUC, cp932 等で書かれたファイルが破壊されることはないのでしょうか。
ない。 というか >s/¥n/¥n¥r/' これは s/¥n/¥r¥n/' このほうが正解に近いっていうか、 それ以前に "¥n" は環境依存なので、¥x0A を使っておけば、 確実なヨカン。
ありがとうございます。壊すことはないのですね。 \nが環境依存だとは知りませんでした。\x0Aを使うようにします。
>>912 はい、すみません。
# s/''/""/g
謝らなくたっていいだろ
環境依存ってか、常にbinmodeすれば問題なし。
\r\nはbinmodeの問題じゃねぇぞ
ごめんなさい
謝ってすむと思ってんのか
遺憾の意をperlコードで表させていただきます↓
m(_ _)m;
921 :
915 :2006/09/04(月) 17:49:15
謝って済む問題ならはじめからやらない。
それが僕のモットーですが、何か?
金で解決することには謝らない
謝って誤魔化そうとしている
全然おもろない
>>908 完全に自分でコントロールできるプロクシはいろいろ使い道があるよ。
英単語を覚えるために、日本語のページの単語に英単語をつけたり。
1000語ぐらいのをProxomitronでやったら遅くて死ねた。
927 :
perl初心者 :2006/09/05(火) 01:24:18
すいません、簡単なことを聞きたいんですけど、メールフォームの作り方を 学んだんですけど、その本には、sendmail.iniの設定を変える必要があると のことですが、ホスティング(ロリポップやさくら)の場合、単に、 $sendmail = '/usr/sbin/sendmail';みたいな感じで設定して終わりでいいんでしょうか? sendamil.iniをいじるのは、自分でサーバを持っているときとかのみですか?
928 :
perl初心者 :2006/09/05(火) 01:26:50
すいません、この質問はWEBプログラミング板でするべきでしたよね。 勘違いしてすいません。
httpクライアントもどきをつくりたいのですが、サーバから送信の最後に \r\nが送られてこない場合に、通信のタイムアウトを起こすまでSOCKETが readできません。 Content-Lengthから必要な分だけ先に読み込むことができないでしょうか。 use IO::Socket; my $SOCKET = IO::Socket::INET->new(PeerAddr =>$host, PeerPort =>$port, Proto =>"tcp", Type => SOCK_STREAM ); $SOCKET->autoflush(1); binmode($SOCKET); #ヘッダー処理 while (<$SOCKET>){ m/^\r\n$/ and last; } #本文処理 while (<$SOCKET>){ print $_; #<- タイムアウトになるか\r\nを受信するまでよみこめない }
>>930 「バッファリングされてて吐けてない」に一票。
LWPじゃだめなの?
933 :
デフォルトの名無しさん :2006/09/05(火) 09:44:21
相談 2つのperlスクリプト、A、Bがあります。 Aは一つのファイルhhhのデータの読み込みのみ、Bは書き込むだけです。 このような場合、Bはファイルhhhに書き込む時、ファイルロックする仕組み を実装する必要があるでしょうか。 テストした範囲では問題がないのですが。 アドバイスよろしくお願いします。
同時実行される可能性があり、かつ追記でないならロック必須だし そうでない場合もAが不完全なデータを読み込ませないためにロックした方が良い。
>>933 別にいらないと言えばいらないけど
Bが書き込んでる最中に 途中まで書いた分をAが読んで
誤動作されるのもやなので Aはタイムスタンプを監視してて
処理終わった後に時刻が変わってたらやりなおせ
たいてい、AとBがわかれてるのは 読み込むAは のんびり処理、 書き込むBは いそいで処理 というのが相場だから ・Aはファイルをロックしない(できない) ・Bがロックしてる最中はAは読めない ・Aの処理中にBがロックしたら Aは(中断して)リトライ という条件が必要になる AもBもロックできるようにすると、Bはいらいらして ぶちギレ金剛
937 :
933 :2006/09/05(火) 11:11:14
>934-36 ありがとうございます。 Bはappendするのみです。 hhhのファイルの末尾に次々とデータを追加していくのみです。 Aのアクセス頻度は不確定です。 Aが激しくhhhを読むもこともあり、また緩慢な場合もあります。 Bは書き込み頻度の調整がききます。今のところ Bは30秒に一回程度、ある程度大きなデータを書き込みさせようかなと。 Aにはデータチェックさせる仕組みとリトライさせる仕組みを実装しています。 データを追記するとき等、 何らかの理由でファイルにもともとあったデータが破壊されるかどうか また、Bがデータを追記しない、 これらが心配の種です。 まっ、きりがないし、いっか。
>>937 で、もちろん同時実行の可能性はないんですよね?
>>931 さん
それはわかってるんですが、バッファリング解除方法がわかってないんです。。。
>>932 さん
ありがとうございます。早速つかってみます。
調べれば便利なパッケージがあるんですね。。X68000・・・のサイトを参照して
作っていたので、まったくしりませんでした。。
フラッシュ・ゴードンのテーマ
941 :
デフォルトの名無しさん :2006/09/06(水) 15:44:22
PerlのIDEでお勧めありますか? 調べたら結構あるもので迷ってます。 仕事でEclipseを使っているJAVA屋ですので、似たようなのがいいのですけど。
久々にでたw 質問者の「それはわかっております」ww
>>941 Eclipseに思い入れがあるならEPIC使っちゃえばいいじゃないか。
-4の4乗は256だよね。 で、 perl -e "print -4**4" こうやっても、仕様上4**4の結果に対して-が付くから、結果的に -256ってなってしまう -4の4乗を計算させるにはどうしたらいいだろう
()つければいいのにって言おうとしたけど perl -e "print (-4)**4" ってやったら-4って表示された perl -e "$a=(-4)**4;print $a;" ならできるんだが・・・ なんで上のはうまくいかないんだろう
連投すまん perl -e "print ((-4)**4)" だとうまくいったからprintを先に実行してその戻り値に対して**4を実行してたっぽい
dir /sみたいなのを再帰で実装したいんですが、再帰するときのファイルハンドルってどう処理すればいいんでしょうか。 sub test { my ($dir)=@_; opendir(DIR,$dir); foreach (readdir(DIR)) { if (!index($_,'.')) {next;} &test($_); } closedir(DIR); } こんなんでも動いてますが、これでいいんですかね?
local *DIR;
>>947 ってか、.bashrcが消えないような気がするから糞。
perl -e "$x=-4;$y=4;print $x**$y" wwwっうぇww
perl -e "print +(-4)**4"
953 :
931 :2006/09/07(木) 00:35:49
>>939 あなたの理解度については私どもにも割と伝わっていると思います。ですから取り繕わなくても大丈夫です。
今回の目的は LWP で果たせるでしょうから、がんばってください。できればモジュールのドキュメントも読んであげてくださいね。
>>947 ディレクトリエントリ全部読んでclosedirしてから吟味する。
開きっぱなしヨクナイ
開きっぱなしは良くないかもしれないけど再帰処理で >>ディレクトリエントリ全部読んでclosedirしてから吟味する。 するとメモリ不足も考えられるよね。
ファイルディスクリプタ不足 vs. メモリ不足
そこで FileCache …かな?
fd set size(うろ覚え)とかでデフォルトだと4096個とかだっけ。 ディレクトリの再帰処理だと変数で保持しておくのはディレクトリ名だけ だからメモリ数百メガはあると考えると保持しておくほうがいいのかな。 lsとかrmもメモリに保持してるね。
ディレクトリエントリを全部吟味しながら読んで、 closedirしてから再帰に突入でいいやん。
>>947 > dir /sみたいなのを再帰で実装したいんですが、
File::Find
すいません質問です。 s/\(?([A-Z])([A-Z])\/)?\/1/ ~~~~~ の意味がわからなくて困っています。 置換だと思うのですが、特に下線部の働きがよくわかりません。 どなたか教えてください。 ちなみに置換の対象となる文字列は"(A((BC)D)(EF1))"です。 拙い表現ですがよろしくお願いします。
>>961 それ正規表現として間違ってる。丸括弧が対応してない。
コピペミス?
即レスありがとうございます。 やはりそう思いますか。コピペミスではありません。 個人的には、"\/)?"の/がいらないと思うのですが。
質問です! ログインして10分経過後、再認証を行なうプログラムについて教えて下さい。 学校の課題なんですがさっぱり分りません。。。
>>954 こんな感じですか。
sub dir {
my ($dir)=@_;
my @dirs;
opendir(DIR,"$dir/") or return(0);
foreach (readdir(DIR)) {
if (!index($_,'.')) {next;}
push(@dirs,$_);
}
closedir(DIR);
foreach (@dirs) {
if (!&dir("$dir/$_")) {print "$dir/$_\n";}
}
return(-1);
}
ヤター!ウゴイターヨ!
メモリ消費量とかは気にしない事に。
>>960 use File::Find;
find(\&print,$dir);
sub print {
print $File::Find::name, "\n";
}
何でこれが動くのかなかなか理解出来なくて悩みますたが。
実際に使うならこっちなのかな……
って事で解決しました。どうもありがとう。
>>961 正規表現が正しくないので下線部の意味は特定できない。
ちゃんと文の終わりの ; まで書くべし。
968 :
デフォルトの名無しさん :2006/09/08(金) 08:20:08
漢数字を半角数字に変換(一→1)、及びその逆(1→一)と、 半角数字を全角数字に変換(1→1)、及びその逆(1→1)がしたいのですが、 何かいい方法はありませんか?
>>970 ダウンロードしてみたけど、すごいなCPAN。感心した
必要がモジュールがあると、CPANに自然発生するからな。
CPANの真髄はAcme::*
まずは Acme::Oppai から。
Acmeは似たようなもの・詰まらないゴミが多すぎ。帰れ
とうとう2chにまで…
もんたメソッドもAcmeにあったな。
最近PPMのコード読んでるんだけど、ものすごく汚い。ActiveStateにはコーディング規約があるのか疑いたくなる。
ちゃんと動けばメスを入れるようなものじゃないだろ?
実はActivePerl 5.8.8 build818以降についてるPPM4は問題があることがわかってたはず。
982 :
デフォルトの名無しさん :2006/09/10(日) 01:05:50
>>962 >>967 コードを書いた本人と連絡がつき、解決いたしました。
ありがとうございました。
s/(?([A-Z])([A-Z]))?/1/
としたかったそうです。
^^;
Unknown switch condition (?([A in regex; marked by <-- HERE in m/(?( <-- HERE [A-Z])([A-Z]))?/
ある変数($hoge)の中に日本語(2バイト文字)が入っているかの判定を行うにはどうしたらいいですか?
if ($hoge =~ /[^ -~]/) { # 日本語入ってる }
987 :
985 :2006/09/10(日) 13:05:30
>>986 即レスありがとうございました、うまくいきました。
>>987 改行とかタブ入る可能性あるなら
$hoge =~ /[^¥x00-¥x7E]/;
こっちの方が良い。
989 :
デフォルトの名無しさん :2006/09/10(日) 13:36:45
CGIでPerlを使って作っています。 具体的には,外部に拒否IPリストを作り,それを最初に読み込ませて色々なCGIで使おうと考えています。 元はこういう感じで,これならば,きちんと動作します。 # アクセス制限(ホスト名、IPアドレスを記述) @deny = ( "*.anonymizer.com", "cache*.*.interlog.com", "" ); そこを, $denyIP = './denyIP.dat'; open(IN,"$denyIP") || &error("Open Error : $denyIP"); @deny = <IN>; close(IN); 【denyIP.datの中身】 "*.anonymizer.com", "cache*.*.interlog.com", "" このように外部から読み込もうとしているのですが,動作してくれません。 外部から読み込んだデータについては,まだ何か設定などあるのでしょうか?
>>989 まず、denyIP.dat の内容が間違ってる。
*.anonymizer.com
cache*.*.interlog.com
こんな感じでそのまま書く。
このファイルを @deny = <IN>; で読むと
各行の末尾に改行文字が付いたままになるので
それをちゃんと chomp で除去する。
991 :
989 :2006/09/10(日) 14:04:41
素早いレスありがとうございます。 確かに@denyの内容が上のソースと下のソースでは違いました。 てっきりそのまま格納されると思っていました。 きちんと両方とも確かめておくべきでした。 アドバイスありがとうございました。
perl である複数行の文字列に一致した部分を表示するプログラムを作っているのですがうまくいきません。 aaa bbb ccc に一致する部分を表示する場合、下記の様にするとうまくいきません。 /aaa\nbbb\nccc/m も試してみましたがだめでした。 while(<FH>){ if(/aaa\nbbb\nccc/){ print; } } <FH>で1行ずつ読み込んでるのでこの処理はむりなのでしょうか? ご教授お願いします。
>>992 > <FH>で1行ずつ読み込んでるのでこの処理はむりなのでしょうか?
そう。
994 :
デフォルトの名無しさん :2006/09/10(日) 15:39:47
日テレはルパンにひどいことしたよね(´・ω・`)
995 :
デフォルトの名無しさん :2006/09/10(日) 15:47:32
独習perlで勉強してる。 ----------------------------------------------- $ cat print.pl print '\\\\'; ----------------------------------------------- 上記のたった一行のスクリプトを実行すると、 $ perl print.pl \\ となってしまう。 独習perlには「シングルクォート間にある文字列はエスケープシーケンスを無視する」 と書いてあるのに、なんでこんな結果になるんだろう。 FreeBSD6.1、Cygwin環境下両方で試したけど同じ。
「初めてのperl」を見たら、2.3.1節に、 シングルクォートの間に置かれたすべての文字(ただしシングルクォートと逆スラッシュは除く)が、 そのまま文字列の内容になります。 って書いてあるよ。
シングルクォーテーション内では、 \\ -> \ \' -> ' 他の文字 -> そのまま
padding
1000 :
デフォルトの名無しさん :2006/09/10(日) 16:56:52
1000なんていらない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。