1 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:07:22 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 ttp://pc11.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 ttp://www.perl.org/get.html ● 2008/01/11現在の最新版: 5.10.0 ● 2007/01/11現在の開発版: 5.9.5 前スレ Perlについての質問箱 33箱目 pc11.2ch.net/test/read.cgi/tech/1192463997/ リンク集は>>2-3 過去スレは>>4 あたり
202 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:37:31 ] なんでこうなるのかよく分からないので教えてください。 ■テスト1 ・CORE::GLOBAL::exitは呼ばれず、終了してしまいます。 #!/usr/bin/perl use strict; *CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)}; exit(1); 1; ■テスト2 ・事前にSample.pmを作成します。 package Sample; use strict; use warnings; *CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)}; 1; ・CORE::GLOBAL::exitが呼ばれます。 #!/usr/bin/perl use strict; *CORE::GLOBAL::exit = sub {printf "exit(%s)\n",join(",",@_);CORE::exit(@_)}; exit(1); 1; ■動作確認環境 This is perl, v5.8.5 built for i386-linux-thread-multi This is perl, v5.8.8 built for x86_64-linux-thread-multi
203 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:38:31 ] すみません。テスト2のコードが間違ってました。 #!/usr/bin/perl use strict; use Sample; exit(1);
204 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:24:02 ] >>201 SET ACTIVEPERL_PPM_HOME=C:\Perl\ppm で起動できました これで枕を高くして眠れます ありがとうございます
205 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:41:52 ] >>202 コンパイラがexitキーワードを解決するときの *CORE::GLOBAL::exit の問題。 #!/usr/bin/perl BEGIN { *CORE::GLOBAL::exit = sub { printf "exit(%s)\n",join(',',@_);CORE::exit(@_)}; } exit 1; # この行が(実行ではなく)コンパイルされる時の *CORE::GLOBAL::exit
206 名前:デフォルトの名無しさん [2008/01/29(火) 10:53:21 ] my @a = (1, 2, 3, (4, 5)); のように配列の中に配列を入れたいんですが、できますか? やっぱり、リファレンスを使うべきなんでしょうか?
207 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:23:20 ] べきっつうか、リファレンス使わないと出来ない
208 名前:デフォルトの名無しさん [2008/01/29(火) 16:01:58 ] linux版CPANを入れたらcpan shellに出入りするたびに Terminal does not support AddHistory. Terminal does not support GetHistory. と言われるんですが、これは何ですか。
209 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:15:04 ] readlineがないとか?
210 名前:デフォルトの名無しさん [2008/01/29(火) 17:32:43 ] >>209 Bundle::CPANのことでしょうか? 入ってるし機能しているはずなんですが・・・。 cpan> で上下矢印キー押すとコマンド履歴出てくるから入ってる証拠ですよね。 おかしいです。
211 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:28:34 ] とりあえず、ソースコードをメッセージテキストでgrepしてみるところから 探求をはじめなよ。
212 名前:デフォルトの名無しさん [2008/01/29(火) 18:38:12 ] >>211 あっ!!そういう手があるんですね。 hackですね。ww
213 名前:デフォルトの名無しさん [2008/01/29(火) 20:38:01 ] やはり分からないのでおたずねします。 cpanの入れ直しから始めて、cpan setup後に cpan >install Bundle::CPAN をして、途中で ---- Ah, I see you already have installed libnet before. do you want to modify/update your configuration(y|n)? [no] ---- とあったのですが、これはどういう意味ですか? (英語としての意味じゃなくて、その中身です。何を指してるんでしょう。) ソース見てもソース自体がよく分からなかったです。
214 名前:デフォルトの名無しさん [2008/01/29(火) 20:41:34 ] あと enter arithmetic or perl expression: exit はexitのままEnterで良いですか? いずれもメッセージ本文でGoogle検索してみたものの英語力不足のせいか 全く目当ての情報が見つかりませんでした。
215 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:03:54 ] >>213 中身て? 単に、設定ファイル上書きしていいか 聞かれてるだけだけど…
216 名前:デフォルトの名無しさん [2008/01/29(火) 21:18:58 ] >>215 中身というのは 「設定ファイルを上書き」 というのが何かという意味です。 perlに慣れた人ならすぐ分かるのでしょうが、私は慣れていないので ピンとこない、といえば伝わるでしょうか?
217 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:21:03 ] 慣れたもなにもcpanの設定を変えていいかどうかを聞いてるだけやがな
218 名前:デフォルトの名無しさん [2008/01/29(火) 21:27:42 ] 2時間もいろいろ調べ続けてこれなんです。 英語は分かるので英語的な意味は分かるんですが、それが「何を指しているか」 が分からないんですよ。 言葉って指すものについての経験が不足していると伝わらないでしょう。 パソコンを触ったことがない人にアルゴリズムの話をしても伝わらないように。 冷静に考えてみてください。 それに、上で引用した ---- Ah, I see you already have installed libnet before. do you want to modify/update your configuration(y|n)? [no] ---- にしたって、その部分の意味は英語の分かる私にはわかりますが、 文脈が分からないのですよ。 言葉って断片だけでは意味をなさなくて、背景の理解があって初めて、 その言葉が理解できるものでしょう。 なので、私がこのメッセージがチンプンカンプンだというのはそういうことです。 それで、どうすればいいんですか? cpanという言葉もよく分かっていない状態なのですが、 設定というのも何を指すか分からないですが、 cpanの設定を変えていいかはどう判断したらいいんですか? よろしくお願いします。
219 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:44:59 ] 自分の書いた設定を書き換えられるのに抵抗を感じるならno。 さもなくばyes.
220 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:14:58 ] >>218 日本語でおk。 要は、「どんな情報があって、それが何を意味していて、その情報を書き換えられたらどうなるのか、ということがわからない」と言いたいんだな?
221 名前:デフォルトの名無しさん [2008/01/29(火) 22:22:50 ] いいえ、ケフィアです。
222 名前:デフォルトの名無しさん [2008/01/29(火) 22:26:14 ] >>219 ありがとうございます。結局よく分かりません。 noにして大きなトラブルが生じそうになかったのでnoにしました。 では、代わりに。これも昨日から発生している問題なのですが、 cpan -fi [modname] としたときに Unknown option : f と出ます。 Bundle::CPANを入れたらforceオプションが使えるようになると聞いたのですが、 このようになります。 ただし、cpanシェルのなかに入って cpan[1]>force install [modname] という操作なら出来ます。 出来ないのは、普通にシェルのコマンドライン上で $ cpan -fi [modname] とすることによるforceインストールが出来ません。 代わりに普通のインストールが行われてしまいます。 "unknown option: force" - Google 検索 www.google.co.jp/search?num=30&hl=ja&q=%22unknown%20option%3A%20force%22&lr= 17件しか引っかからず、よく分かりません。 Bundle::CPAN
223 名前:デフォルトの名無しさん [2008/01/29(火) 22:30:38 ] >>220 質問の意味がよく分かりません。 私が言いたかったのは断片だけでは言葉って意味をなさないということです。 文章的な文脈と知覚経験的な文脈とがあって意味をなすということです。 つまり、 ---- Ah, I see you already have installed libnet before. do you want to modify/update your configuration(y|n)? [no] ---- が分からないという質問に対して2度も直訳的な回答をされたのに対して それでは伝わらないと言ったまでです。
224 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:33:26 ] 経験がないとかいう問題じゃなくて、単に理解力・想像力がないだけだろ。
225 名前:デフォルトの名無しさん [2008/01/29(火) 22:39:55 ] >>224 いいえ、正確には、このケースで必要とされる理解力と背景知識がなかった、です。 それで、背景知識としてどういったものが必要なのかが分からないので手がかりが欲しくて 上記の質問をしたのです。 理解力なんて測定できなくて曖昧なものを頼りにしていても仕方ないので、 まず背景知識を摂取する、そこがスタートだと考えました。
226 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:52:57 ] >>214 については、そのままEnterでOKだと分かりました。 >>222 が分からないので調査中です。
227 名前:デフォルトの名無しさん [2008/01/29(火) 23:01:51 ] >>225 理屈ばっかりこねて行動力の無いタイプだな
228 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:11:30 ] >>223 yes入力してみればどうなるか分かるだろうに。
229 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:59:27 ] >>225 手がかり? 文中にはっきり「libnet」と書いてあるじゃないか。 ググって最初に出てくるのがこのページだ。 perldoc.jp/docs/modules/libnet-1.12/Net/libnetFAQ.pod > libnetって何? > libnetperl5モジュールの集合体で、それらは全てネットワーク > プログラムに関連します。 ネットワーク関係のモジュール名を挙げて設定をするか否か 尋ねてきているんだから、ネットワーク周りの設定を改めて行うか どうか問われている事ぐらい容易に想像できるだろ? >まず背景知識を摂取する それを自力で行う能力が致命的に欠けているだけだろ。
230 名前:デフォルトの名無しさん [2008/01/30(水) 00:39:16 ] >>227 理屈をこねたかどうかが大事なのではなくて、理屈が正しいか、 そして理屈が有効かが大事なんですよ。 正しくないor無効な理屈をこねていて、なおかつ行動もしていないのなら あなたは私を批判する権利があります。 しかし、残念ながらこのケースではそれに該当しません。 それに、私は>>224 に対して>>225 を言ったということを忘れないでください。 >>224 で想像力がないと断定されたのに対して>>225 はその反論です。 決して無駄なおしゃべりをしたのではありません。 >>228 yes入力してみましたよ。noも。3回くらいはやって何が起きたかを観察しましたが 違いが分かりませんでした。
231 名前:デフォルトの名無しさん [2008/01/30(水) 00:39:53 ] >>229 >ネットワーク周りの設定を改めて行うか >どうか問われている事ぐらい容易に想像できるだろ? もちろんです。ですがそれ以上は想像できません。つまり、それ以上は「背景知識」を 摂取することで補完する必要がありました。 なぜ補完の必要があったか、それは以下のことが分からなかったからです。 1. たしかにlibnetと書かれているし調査の結果libnetがネットワーク関連だということも 分かったが、聞かれているのが本当にlibnetについてなのか、つまり、 do you want to modify/update your configuration(y|n)? [no] というのは「configuration of libnet」の意味なのか 2. my configurationをmodifyとあるが私はこれまでにlibnetの設定をした記憶がない。 なのに、my configurationとはどういうことか。 3. configurationをなぜ今する必要があるのか 4. 今configurationの各項目をいい加減に決めてもconfigurationをあとで修正できるのか 5. もしそうなら知る必要があるconfigurationの保管場所はどこか
232 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:44:02 ] ここはお前の哲学を語るスレじゃない。
233 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 02:18:43 ] >>231 この"configuration"は「設定」というより、「構成」なんだろうよ。
234 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 02:56:38 ] Perlの話をしなさい。 ここは自分の思想を押し付けるスレじゃない。
235 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:11:37 ] 英語が分かるなら英語圏のユーザーに 聞けばいいんじゃねえの?
236 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:27:59 ] IDが無い板なんだからコテハンつけてほしいな あぼーんする手間が面倒だよ
237 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:50:31 ] >>231 ドラゴンボールの中でフリーザが一番好きです まで読んだ
238 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 08:52:31 ] >>233 そうなのですか。参考にします。 >>232 >>234 とんだ誤解ですね。私は決めつけられた誤解に対して答えただけですよ。 うらむ相手が間違っています。 それに私は私の哲学をどこで語っているんでしょうか。 Perlに関する質問のやりとりのなかで、致命的な誤解が生じてしまったので、 事情説明をしてコミュニケーションの修復を図っただけですよ。 どこにも私の主観・思想が語られておらず、ただ私に関する事実が述べられているのみです。 (もう一度お読みになってみることをお勧めします。) それなのにその部分だけとりあげて哲学を語っているからスレ違いだとするのは あまりに早計ではないでしょうか。 >>235 それだけの英語力があるかはやや不安です。 やはり、日本人だから日本語のほうが話しやすいものです。
239 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 09:00:21 ] >>238 つうかもっと完結に書く能力はないの? どうせ「誤解のない詳しく書いてどうのこうの」ってくどくど書くんだろ? その妙な書き方 前に見たような気がするが…
240 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 09:10:20 ] >>238 > うらむ相手が間違っています。 >>232 >>234 がお前さんを「うらんでいる」という解釈こそ、この場で最も大きい「とんだ誤解」では。 どこから「うらむ」という発想が出てきたのか、まるで見えてこない。
241 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:03:47 ] 自分がなんで注意されてるかさっぱり理解できない天然さんぽいから放置で。
242 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:28:45 ] なんという入れ食い
243 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:34:40 ] >>239 確かに簡潔に書くことは大切ですが、私が簡潔に書く能力がないとするのは論理の飛躍です。 それに、私の文章が簡潔でないというのも偏見ではないでしょうか。 文字数が特別多いわけでもないでしょう。 あと、簡潔に書けるのになぜ簡潔に書かなかったかというと、その必要を感じたからです。 つまり、あらぬ誤解をかけられて、それがために質問者としての目的の遂行に障害が発生したので、 必要なだけの対策を講じたまでです。 そうした些末なことはまさにスレ本題ではないので、>>241 の言うように放置をお勧めします。 それから、2chは私は数年前から定期的に利用しているので、私の文章をあなたが見た可能性は否定 できませんが、私の今回の文章を見ただけで、あなたが過去に見た特定の文章の書き手と同一視して しまうのは早計ではないでしょうか。 そもそも、仮にあなたが過去に見たような気がするというその文章が私のものだったとしても、 だからどうしたというんですか? 発言の意図が見えてこないし、スレ違いもはなはだしいので自重お願いします。 >>240 うらむという表現は「敵対的な言い方をされる」という表現に置換することも可能です。 要するに、表現方法の問題です。 そもそも、仮に、私が>>238 で「とんだ誤解」といったときに最大な過ちが私の表現方法 にあったのだとしても、>>232 >>234 が誤解をしていることには何ら変わりがありません。 >>241 具体的にどんな点で私が注意されるべきなのでしょうか。 もっとも、>>241 が私に向けた発言でないことは明白ですが。
244 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:39:18 ] にゃーにゃー
245 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:42:17 ] 日本語として成立しなくなったら釣りも終わりだな。
246 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:54:08 ] しねばいいのに・・・
247 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:47:15 ] 日本語の得意な朝鮮人が来てますねwww
248 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:52:09 ] 895 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/07(月) 02:32:27 頭が悪いのに口だけは達者な馬鹿の典型だなw
249 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:13:01 ] 会社で嫌われてんだろうなぁ・・・
250 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:15:37 ] >>243 早くインストールしろよw
251 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:18:17 ] >>243 > そうした些末なことはまさにスレ本題ではないので、>>241 の言うように放置をお勧めします。 オマエガナ
252 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:23:42 ] 祭りと聞いて(ry
253 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:32:31 ] ごめんなさい。釣りでした。
254 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:39:22 ] 続きまだぁ?
255 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:50:44 ] Perlでは珍しいタイプの狂人だな
256 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:52:12 ] この無駄な冗長さはコボラー
257 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:53:12 ] 珍しく伸びてると思ったら …珍しくもないか
258 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:51:58 ] それに、あと、つまり、それから、そもそも、 こんな接続詞が多用されている時点で 簡潔に書けてない事がよく分かるな。
259 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:22:35 ] みんな、楽しそう。
260 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:11:09 ] あーこんな文章をどこかで見たことがあると思ってたらアレだ 精神病の人が医者に「これこれで私は精神病じゃないです」って言ってるのにそっくりなんだわ たとえばこれとか ttp://www.so-net.ne.jp/vivre/kokoro/psyqa1331.html
261 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:16:37 ] 3行でおk
262 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:43:52 ] ス レ 違い
263 名前:デフォルトの名無しさん [2008/01/31(木) 02:25:46 ] なぜこのスレに、精神異常者チェイサーズが集結しているのか?
264 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:37:30 ] 後に現れるのは、もちろんキティガイ
265 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:03:28 ] エンターキーを押さなくてもキーボードから 一字だけ入力を受け付けたいときはどうすればいいでしょうか?
266 名前:デフォルトの名無しさん [2008/01/31(木) 20:08:05 ] >>265 っ[Term::ReadKey]
267 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:19:17 ] できました。ありがとうございました。
268 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:23:46 ] $count = $x =~ tr/0-9/0-9/; で数字の桁数を数えられるようですが、どういう仕組みなのか分かりません・・・ くだ質の類だと思いますが、よろしくお願いします。
269 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:47:50 ] tr演算子は置換した文字の数を返す
270 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:48:16 ] $xの数字を同じ数字に置換して,置換した回数を$countに入れてる. $xが数字だけなら桁数と一致するわな.
271 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:32:10 ] 目からウロコが落ちた。確かに数えられるねぇ。 でもなんか違う気がする。
272 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:46:35 ] 面白いコードと実用的なコードには差があるからな。
273 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:59:15 ] できるこたできるけど中身が数字列の場合に限るし それが保証されてるならlengthでもいい気はする。
274 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 03:09:51 ] >>273 my $num = '-123,456'; print $num =~ tr/0-9//, "\n"; # 6 print length $num; # 8
275 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 08:49:13 ] 実戦での桁数は計算で出すよね
276 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 10:18:25 ] 計算てw
277 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:53:20 ] n進数の桁数は計算だすよ
278 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:54:25 ] >>274 いや数字だけの列と保証されてる場合よ。
279 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:08:24 ] 電話番号やカード番号みたいに、ハイフンがあったりなかったりのチェックで・・ ・・・文字数だけじゃあんまり意味ないか
280 名前:268 mailto:sage [2008/02/01(金) 14:12:06 ] trは置換した文字列を返すんですね。 処理の順番も勘違いしてました。↓の順番なんですね $count = ( $x =~ tr/0-9/0-9/ ); ありがとうございました。
281 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:25:00 ] 「置換した文字列」ではない。 置換もしくは削除した文字数を返す。
282 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:32:45 ] while ($x =~ m/\d/gs) { $count++ }
283 名前:268 mailto:sage [2008/02/01(金) 14:41:11 ] >>281 書き間違えでしたスイマセン
284 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 15:47:47 ] 重箱の隅だけど、 tr/a/a/ ってのは置換したことになるの?
285 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:05:17 ] やってみろ。
286 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 17:08:30 ] tr/hoge/hage/ の hoge にマッチした回数でいいんじゃね?
287 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:12:45 ] >>284 文法上は置換する(したことになる)が、実際の置換は行われない。 tr/X// や tr/X/X/ は対象に含まれるXを数える為の記述で、この場合には対象が 左辺値である必要もない。 perl -le "print q/123,456/ =~ tr/0-9a/0-9a/" # エラーにならない perl -le "print q/124,456/ =~ tr/0-9a/0-9b/" # エラーになる perl -le "print int(1234.56) =~ tr/0-9a//" # エラーにならない
288 名前:デフォルトの名無しさん [2008/02/01(金) 21:17:49 ] ちょっと自分で試してみればすぐ答えが出るのに。 なんで試さないのかなぁ。 もしかして、ナイコン?
289 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:24:32 ] 確かにわけわからん レスを書くよりキーを叩く回数が少ないのに。
290 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:55:00 ] 重箱の隅とか言いつつperlバイナリのソースコードのレベルの話を求めてるんじゃね?
291 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:24:02 ] % perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a//' print 'aaaaa' =~ tr/a//; -e syntax OK % perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a/a/' print 'aaaaa' =~ tr/a//; -e syntax OK
292 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:10:44 ] 5.00503だと 'aaaaa' =~ tr/a// は Can't modify constant item in character translation と怒られてdieした。5.6.1なら置換回数が返された。
293 名前:デフォルトの名無しさん [2008/02/03(日) 23:24:30 ] 質問です。 だいぶ前に書かれたライブラリ(*.pl)が現役で動いているとします。 色々な箇所で使われているため、(動いている限りは)できるだけこれを修正したくありません。 このライブラリの中に、以下のようなサブルーチンがあります。 sub Func { local *data = $_[0]; #ハッシュにいろいろ詰め込む } このサブルーチンは、以下のように呼び出すようにとサンプルコードが示されています。 local %hash; &Func(*hash); これを呼び出し側だけでもlocalを排除しようと、以下のように書き換えました。 実行してみた結果、ちゃんと動いているように見えます。 my %hash; Func(\%hash); この場合、 1.呼び出し元だけを書き換えることに意味はあるのか? 2.あるとしたら正しい書き方は?(cron、CGI、mod_perlで動かすことを想定) よろしくお願いします。
294 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:17:53 ] バージョンによる
295 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:25:32 ] >>293 一般論としては、その修正で得られるのが自己満足だけなら、さわらないことをお勧めする。
296 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:16:16 ] >294 あ、バージョン書き忘れてました。 Perl 5.005 Apache/1.3.28 (Unix) mod_perl/1.29 ※下2つはCGIやmod_perl動作時のもの。 >295 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので なるべくmyで統一したいと考えています。 それに、そのサブルーチンを呼ぶときだけlocalなのも変かなーと。
297 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:21:10 ] >>296 > 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので > なるべくmyで統一したいと考えています。 そんな変質的行為に突入する前に、localの挙動をきちんと理解しろ。
298 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:41:31 ] localだと値を追いかけるのが面倒で……。
299 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:08:20 ] 基本的にはそれで正しく動くはず。 ただ、1.2.の問いがあるから「書き換える必要はないんじゃないの?」って言われてるわけで。
300 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:38:30 ] ありがとうございます。 ライブラリの方を修正したいけど……中途半端に手を出したら悲惨なことになりそう……
301 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:52:29 ] 古いライブラリをmod_perlで使おうとは思わないなぁ
302 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:18:11 ] 古いライブラリをmod_perlで使うんじゃないんです 古いライブラリがmod_perlで動いてるんです……