トップページphp
1001コメント343KB

Perlコーディング初心者質問スレ Part 63

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/09/09(金) 18:11:49.71ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2 以降

前スレ http://hibari.2ch.net/test/read.cgi/php/1295170172/
0726nobodyさん2012/04/30(月) 16:16:02.92ID:???
仕事でフィーチャーホン向けを扱ってるんだけど
そのへんだと海外だと厳しいなあ。
0727nobodyさん2012/04/30(月) 16:53:49.39ID:???
そうだね海外は遅れてるからね。
0728nobodyさん2012/04/30(月) 17:44:38.24ID:???
>>724
だったら原書読んだ方がはるかにマシ

しかし原書も古い書き方を見捨てモダン()に走る兆候がみられてきている
高い新品の本を買うなら一昔前の版を安く買ったほうがコストパフォーマンス面では断然良い
0729nobodyさん2012/04/30(月) 17:56:01.18ID:???
原書にはどこにもモダンPerlなんて出てこなくて日本国内だけの幻想だけどな
わざわざ敷居を高くして付き合いづらいものにしようなんて意図は全くない
0730nobodyさん2012/04/30(月) 18:09:03.43ID:???
>>729
お前もモダン()って言葉に踊らされている
要は書き方の問題だよ
自分一人で満足するなら新しい書き方でもいい
でも他の人でも保守できるようにするなら古典的な書き方の一択しかない
0731nobodyさん2012/04/30(月) 19:33:27.10ID:???
モダン=普通
なんだから、モダンなんて言われてないの当たり前

モダンと言わなくても、モダンに書くのが海外
0732nobodyさん2012/04/30(月) 20:49:51.58ID:???
こいつ英語も分からんのか…
0733nobodyさん2012/04/30(月) 21:00:57.20ID:???
http://dictionary.goo.ne.jp/leaf/ej3/54376/m0u/modern/

1 ((限定))現代の, 近ごろの, 今の
modern city life
現代の都会生活.

2 ((限定))近世の, 近代の. ⇒ANCIENT11, CLASSICAL, MEDIEVAL
modern history

近世史(ほぼルネサンスから現代まで).
3 〈流行・考えなどが〉現代風の, 新しい, 最新の, モダンな(up-to-date);((限定))〈芸術・文学・音楽などが〉現代的な
modern dance
モダンダンス
modern fashions
最新の流行型.
━━[名]((しばしばthe ?s))現代人;新しい思想の持ち主
This author is one of the moderns.
この作家は現代の作風を代表する一人である.
0734nobodyさん2012/04/30(月) 21:19:31.95ID:???
今風の書き方けなしてまで古い書き方押し付ける奴って迷惑でしかない
0735nobodyさん2012/04/30(月) 21:48:32.78ID:???
つまり、旧仮名遣いでやれと
0736nobodyさん2012/05/01(火) 01:20:21.22ID:???
お、モダンのねただな!参戦しちゃうぞ!

モダンじゃないとするとどうして「古く」なっちゃうのかちょっと
教えてくれよ、そこのノータリン。
0737nobodyさん2012/05/01(火) 12:35:54.71ID:???
マリリンモンローノータリン
0738nobodyさん2012/05/01(火) 21:05:19.98ID:???
Perlはこれまでに同心円状に機能を拡張してきていて、高い後方互換性を
維持してきている。そこで、

同心円の内側のみを使ってスクリプトを記述すれば、古いインタプリタでも
新しいインタプリタでも実行できて便利(そういう需要がある)。

と考えるのと

同心円の外側の部分のみを使ってスクリプトを記述すれば、古いインタプ
リタを根絶できるので便利(複数のインタプリタをメンテするのは無理・無駄)。

と考えるのとがあり、目指していることが違うので議論はいつも平行線で
終わってしまう。
0739nobodyさん2012/05/01(火) 22:39:14.05ID:???
まず、俺の作ったアプリを
今よりも古いOSで動かすとかまずありえない。
0740nobodyさん2012/05/01(火) 23:19:15.85ID:???
それぞれの需要外の話をし始めるから、議論がよじれる。
0741nobodyさん2012/05/02(水) 23:55:49.46ID:???
需要外は想定の範囲外、断固外。
0742nobodyさん2012/05/03(木) 12:53:45.35ID:???
いままでと違う環境でCGIが動かないのですが
a.cgiからlib/b.cgiをrequireするんですが
 Can?t locate ./lib/b.cgi in @INC
とエラーが出てしまいます。
コマンドで
 perl a.cgi
だと問題なく動くのでCGIの場合に相対パスで読み込めてないような気がします。
どこの設定を見直せばいいでしょうか?

./
 |
 |a.cgi
 |
 |lib-|
        |b.cgi
0743nobodyさん2012/05/03(木) 14:16:30.71ID:???
前の環境を書く。

今の環境を書く。

前の環境に戻す。
0744nobodyさん2012/05/03(木) 14:44:25.44ID:???
前の環境と今の環境のカレントディレクトリを調べる
require を相対パスで書かずに絶対パスで書く
0745nobodyさん2012/05/04(金) 13:56:44.21ID:???
>>738
後者が古いものを切り捨てようとしているのに対して、前者は新しいものを
切り捨てようとしている【わけではない】ことに注意する必要がある
0746nobodyさん2012/05/04(金) 15:59:43.14ID:???
>>745
つまりPerl4で書くのが最良である、と。
0747nobodyさん2012/05/04(金) 17:49:33.26ID:???
>>743-744
mod_perlだったみたいで互換性ないの知りませんでした
ふつうのCGIにしたら問題なく動きました
0748nobodyさん2012/05/04(金) 17:53:38.97ID:???
>>745-746
はいはいお年寄りは大切にしましょうね
そのために若者が犠牲になりましょうね
0749nobodyさん2012/05/04(金) 21:41:24.52ID:???
学ばない若者は残念ながら...しかないですね
しかたがない
0750nobodyさん2012/05/05(土) 05:26:52.43ID:???
>>745-746,748-749
共に生きよう。
0751nobodyさん2012/05/05(土) 23:38:10.71ID:???
いつかはモダンというものになるわけなんだけど、どうしてそんなに
あせっているのかが訳わからない
0752nobodyさん2012/05/06(日) 09:53:21.29ID:???
モダンはその時々の流行だから、
余程古い書き方してなけりゃ無理して追う事は無い
0753nobodyさん2012/05/06(日) 10:49:50.61ID:???
慌てて追いかけると失敗作バージョンではまることがあるからね
0754nobodyさん2012/05/08(火) 11:27:12.65ID:KnJQK4vi
mime liteでメールを送ったところ 送信者、CC、添付ファイルが文字化けしてしまった。
エンコード指定すれば回避できると思い調べていたがどうにも・・・orz

送信者(MailFrom) : テスト送信 ぬるぽ <nullpo@nulupoppo.null>;

送信

{文字化けした文字} <nullpo@nulupoppo.null>;
0755nobodyさん2012/05/08(火) 13:58:50.62ID:???
encode/decodeぐらいちゃんとやっとけ
0756nobodyさん2012/05/08(火) 14:04:12.49ID:???
MIME::Liteの名前もちゃんと書けない人には無理な相談だな
0757nobodyさん2012/05/10(木) 11:20:36.37ID:???
mime_encodeを指定して送ったところ そのままの文字で出てしまって・・・
普通 -=utf8? みたいなのからはじまって = で終わるかんじだとおもうんですが・・・どうしたらorz
0758nobodyさん2012/05/10(木) 12:38:20.34ID:???
>>757
MIME::LiteはMIMEヘッダ用のencodeはやらないので自前でやれ、てことらしい
encode("MIME-Header-ISO_2022_JP", "ぬるぽ");
# =?ISO-2022-JP?B?GyRCJEwkayRdGyhC?=

参考:
ttp://pmakino.jp/tdiary/20061215.html
ttp://iandeth.dyndns.org/mt/ian/archives/000628.html

あとMIME::Liteはもう更新されてないのでEMail::Senderとか使えとマニュアルにあった
ttp://search.cpan.org/~rjbs/MIME-Lite-3.028/lib/MIME/Lite.pm
0759nobodyさん2012/05/10(木) 12:40:25.73ID:???
あ、MIMEでUTF-8エンコードなら
use utf8;
print encode("MIME-Header", "ぬるぽ");
# =?UTF-8?B?44Gs44KL44G9?=
0760nobodyさん2012/05/10(木) 14:41:15.55ID:???
use Encode; しないで use utf8; だけでいける?
と自分で確認せずに質問する私
0761758-7592012/05/10(木) 16:43:05.99ID:???
>>760
ごめんなさい、use Encode;ないと無理ですね_| ̄|○ il||li
ちなみに>>758はuse utf8;不要、>>759は要use utf8;です
0762nobodyさん2012/05/10(木) 23:52:03.09ID:???
また Encode がらみか
0763nobodyさん2012/05/11(金) 00:48:08.10ID:???
日本語扱うならそりゃ当然Encodeでるだろw
0764nobodyさん2012/05/11(金) 01:08:31.24ID:???
>>761
encode() に渡されるのはフラグの立った utf8

まずは日本語の扱いをもっと学習した方が良いかも
0765nobodyさん2012/05/11(金) 01:11:10.98ID:???
Encode、EncodeってそんなにEncodeが好きだったらEncodeと結婚すればいいのに
0766nobodyさん2012/05/11(金) 01:12:05.76ID:???
それはエロゲの話だろw
0767nobodyさん2012/05/11(金) 01:14:41.05ID:???
Perl、PerlってそんなにPerlが好きだったらPerlと結婚すればいいのに

>>765
こうですか?
あなたが何を言いたいのかさっぱりわかりませんw
0768nobodyさん2012/05/11(金) 01:24:19.42ID:???
ま、初心者スレなんでその辺は
0769nobodyさん2012/05/11(金) 16:29:39.44ID:???
既出かもしれませんが、お願いします。

CGIなんですけど
open(LOG, ">>/opt/lampp/test/LOG");
とか、
if(!open(LOG, ">>LOG")) {

とかでログファイルをopenしています。

二つのファイルとも、パーミッションは
-rw-r--r-- で同じなんですけど、
下の方で開けたログファイルは、後から同じ上書きopenで開けず
エラーになります。まぁ手動で下のファイルだけ、
-rw-rw-rw- とかに変えればいいんですけど。めんどくさいので
いい方法ありませんか?っていうか何が原因ですか?

よろしくお願いします。
0770nobodyさん2012/05/11(金) 17:02:14.89ID:???
とりあえず俺は馬鹿なんでオマエさんの文章を読むのが辛いってのと
openは3引数で使う、グロブじゃなくて変数を使うってところか
0771nobodyさん2012/05/11(金) 18:35:09.50ID:???
SJISで書いたコードをUTF-8にエンコードして、メールのヘッダに書き込みたい場合どんな感じになるんだろう・・・
0772nobodyさん2012/05/12(土) 14:16:24.41ID:???
POSTで受け取ったメールアドレスをif文判定したいんですができない・・・

if ($in{'mail'} eq "hoge@hoge.com"){
 処理〜
}

これじゃダメなんですか?
0773nobodyさん2012/05/12(土) 14:21:07.43ID:???
>>772
メールアドレスの所をしんぐるくぉーてーしょんに変えるがいい

if ($in{'mail'} eq 'hoge@hoge.com'){
0774nobodyさん2012/05/12(土) 14:34:58.97ID:???
>>773
できました!たったこれだけだったんですね・・・。
助かりました〜
0775nobodyさん2012/05/12(土) 15:45:18.56ID:???
うむ。今度から"でダメだったときは'を使えば良い。
0776nobodyさん2012/05/12(土) 16:02:35.92ID:???
そういう雑な覚え方じゃなくて…
ダブルクォーテーション内では変数は展開されるから、
メールアドレスの「@hoge」が配列として扱われて展開されちゃうから
シングルクォーテーションを使って変数が展開されないようにするか、
もしくは「\」でエスケープして "hoge\@hoge.com" のように書く
と覚えておいた方がええんでは
0777nobodyさん2012/05/14(月) 11:15:17.47ID:???
perlのシングルクォーテーションの使い方って結構変わってる?よね
0778nobodyさん2012/05/14(月) 11:59:37.23ID:???
ダブルクオートの時だけinterpolateできるって仕様はシェル(スクリプト)?から来たものだろうし、Rubyも同じじゃん?
"@foo" が展開される罠は他の言語にはないけどさ
0779nobodyさん2012/05/23(水) 17:27:24.18ID:rf0/+ult
縺繧薙%縺繧薙%
0780nobodyさん2012/05/23(水) 17:28:38.79ID:rf0/+ult
縺繧薙%縺繧薙%
0781nobodyさん2012/05/23(水) 17:32:33.00ID:rf0/+ult
縺繧薙%縺繧薙%
0782nobodyさん2012/05/23(水) 18:59:49.41ID:rf0/+ult
縺繧薙%縺繧薙%
0783nobodyさん2012/05/23(水) 19:32:41.29ID:???
(´・ω・`)?縺繧薙%縺繧薙%
0784nobodyさん2012/05/23(水) 20:09:04.03ID:???
"" で展開、'' は展開しないは、基礎の基礎だから、罠とは言えないだろ。
0785nobodyさん2012/05/23(水) 21:10:40.89ID:???
>>783
何度も投稿して、文字化けで上手くいかないと涙目な>779なのかもしれん
0786nobodyさん2012/05/23(水) 22:36:11.06ID:???
>>784
Perlの罠といえば、誰もが引っかかるeqとか?
0787nobodyさん2012/05/24(木) 04:21:58.60ID:???
>>786
eqで何が引っかかるの?
0788nobodyさん2012/05/24(木) 09:35:27.46ID:???
しばらく他の言語やってPerlに戻ってくると文字列比較なのに==使っちゃうとか結構やるわ
0789nobodyさん2012/05/24(木) 19:30:42.39ID:???
==だと具体的にどういう比較になるんだっけ?
0790nobodyさん2012/05/24(木) 19:42:26.19ID:???
数値に変換して比較
0791nobodyさん2012/05/25(金) 00:00:56.26ID:???
数字以外があると warning
0792nobodyさん2012/05/25(金) 04:32:23.39ID:???
変数がundefだと、warning
0793nobodyさん2012/05/25(金) 06:43:20.05ID:???
俺の人生、warning
0794nobodyさん2012/05/25(金) 08:58:48.21ID:???
>文字列の==比較
特定の用法でなら、使い道ってあるんかな。

例えばCとかなら、使いにくい仕様でも、使い勝手を犠牲にして低レベルな処理にしたとか、
低レベルだからこそPGが直に弄れるメリットも無くはないってのが想像出来るんだけど。
0795nobodyさん2012/05/25(金) 13:41:56.50ID:???
>>794
ん?
== と eq の話しなのだが?w
0796nobodyさん2012/05/25(金) 19:34:09.54ID:???
その話だが?
0797nobodyさん2012/05/25(金) 20:31:46.80ID:???
何かよくわからんが、== は「両端を数値に変換してから比較」する演算子なので、どんな用法でも「文字列比較」はできないよ
0798nobodyさん2012/05/25(金) 20:47:50.48ID:???
Perl側で自動的に区別することも出来たかもしれないけど「10」と「10.0」の比較なんかは困りそうよね
0799nobodyさん2012/06/07(木) 23:29:12.95ID:???
環境の話で恐縮なのですが質問させてください。

EPICとpadwalkerで環境構築してデバッガを動かしてみたのですが、値で文字化けが起きていて困っています。
eclipse.iniには-Dfile.encoding=utf-8を追記して構文検証が動くのは確認してます。

環境のバージョンは下記の通りになります。

eclipse:3.7.2
epic:0.5.46
activeperl:5.14.2
padwalker:1.93

以上、よろしくお願いします。
0800nobodyさん2012/06/10(日) 21:57:43.97ID:???
1
配布されているcgiってstrictやwarnings使ってないやつも結構あるんだが
やっぱりローカルで十分テストしたら外しておいた方がいいの?
それとも単に局所化も考えていないだけの駄コードなだけ?

2
実行ファイルだけじゃなくてライブラリにもstrict,warningsって記述しないと意味無い?
だとすると上で書いたように実際に運用する時外した方がいいとするといちいち全部外さなきゃいけないの?

3
諸設定を分離して別ファイルでグローバル変数として定義してると
実行ファイルなどで「1回しか出てこねーぞ」と怒られてしまいます
どんな回避方法がベストですか

どうせsjisへのconvertしか使わないから不要な部分カットしたjcode.plが一番よくねと思って
jcode.plを見たら思った以上に解読難しかった(´・ω・`)
0801nobodyさん2012/06/10(日) 22:23:30.29ID:???
1. ケースバイケース
2. no が使えるプラグマは、ほぼレキシカルスコープ。
 no strict ; no warnings
 ライブラリだろうと、スコープから外れたら効力は無い。
3. Exporter 使って export すれば?
0802nobodyさん2012/06/10(日) 22:26:24.92ID:???
そんなもん削って得られる利益ってどんだけだろうね?
0803nobodyさん2012/06/10(日) 23:19:34.11ID:???
なんで use strict; と user warnings; を削る必要があるのか理解できないんだが。
0804nobodyさん2012/06/10(日) 23:58:10.87ID:???
use strict; や use warnings; って環境によっては使えないからね。
まあ、そういう経験ない人に言っても伝わらんだろうけど。
0805nobodyさん2012/06/11(月) 00:29:11.97ID:???
大昔に書かれたスクリプトで、メンテしようにもstrict入れると大幅書き直しになるやつとかなw
0806nobodyさん2012/06/11(月) 04:42:03.10ID:???
>>804
strict や warnings が使えない環境なんてあるんか? 思いつかん。
0807nobodyさん2012/06/11(月) 04:49:40.79ID:???
命令 if 条件
命令 or die
これまとめて書きたかったらどう書くの?
命令 if 条件 or die とかでオッケー?
0808nobodyさん2012/06/11(月) 06:00:31.52ID:???
条件 and 命令 or die;
時と場合によっては、括弧で括って演算子の実行順位が変更されないように。
0809nobodyさん2012/06/11(月) 21:39:23.02ID:???
>>806
% corelist strict
strict was first released with perl 5
% corelist warnings
warnings was first released with perl v5.6.0

5.6 未満の鯖を使ってる人なら辛うじて「使えない」と
言えるかも知れんけどねw
804 みたいな意見は、 KENT あたりの強弁を鵜呑みに
してるとしか思えんよ。
0810nobodyさん2012/06/11(月) 23:39:17.35ID:???
普通に5.6より前の環境を指してるんだと思ってた。
0811nobodyさん2012/06/12(火) 01:06:42.34ID:???
単なる未経験者、乙。
0812nobodyさん2012/06/12(火) 05:17:36.52ID:???
10年以上前の鯖を今使ってる奴、いんの?
use strict に至っては、1993 年実装だぞ。
0813nobodyさん2012/06/12(火) 06:08:24.36ID:???
ちょうど今やってる仕事が、strictは使えるけどwarnningsが使えない環境だったりする。
strictも使えないサーバは見たことないな。
0814nobodyさん2012/06/13(水) 01:58:11.19ID:???
さすがにwarnningsはうちでも使えないな。5.10.1だけど。
08158132012/06/13(水) 02:04:10.58ID:???
おっと、スペルミスってたか。失敬。
0816nobodyさん2012/06/13(水) 03:15:49.57ID:???
どうも古い環境をいつまでも使っていて
自分で自分の首を絞めてるだけに見えるな。

一応リリース日書いておくわ。あなたはいったい何年前のマシンを使ってるんですか?

Perl 1.0 1987年12月18日
Perl 2.0 1988年6月05日
Perl 3.0 1989年10月18日
Perl 4.0 1991年3月21日
Perl 5.0 1994年10月17日
Perl 5.5.0 1998年7月22日
Perl 5.6.0 2000年5月22日 warnings導入
Perl 5.8.0 2002年7月18日 Unicode正式対応
Perl 5.10.0 2007年12月18日
Perl 5.12.0 2010年4月13日
Perl 5.14.0 2011年5月14日
Perl 5.16.0 2012年5月20日
0817nobodyさん2012/06/13(水) 04:35:00.28ID:???
自分では環境を決めらんないことって、珍しくないよね?
0818nobodyさん2012/06/13(水) 05:00:19.82ID:???
自分で決められなくても
提案は出来るだろ。
0819nobodyさん2012/06/13(水) 06:39:10.27ID:???
そもそも、時と場合によってはedが活躍する様な、本当にメモリが貴重だった時代の、

(開発用のモジュールはリリース時には滅多に必要にならないんだから)
use strict; -wスイッチは切りましょう
(トラブったら、その時ONにしてデバックすれば良い)。
ってお作法の名残りだろ。本来の意味でのバッドノウハウ(?)
で、アホが行間の意味を考えず、 warningsに置き換えただけ。

perl5.6時代の当初は後方互換 = 環境依存と言う理由が後付けされたが、
それだったら、warningsを使わず -w使えばいいだけの話
0820nobodyさん2012/06/13(水) 07:22:17.87ID:???
提案が認められないことなんて珍しくないがな。
社会に出たことないのか?
0821nobodyさん2012/06/13(水) 12:32:37.23ID:???
この負け犬の社畜野郎めが!!
0822nobodyさん2012/06/13(水) 16:02:50.21ID:???
請負だと、提案はできても最終的に決定するのはクライアントだしなー。
別環境の構築まで仕事として依頼されれば喜んでやるけどさ。
0823nobodyさん2012/06/13(水) 19:16:09.34ID:???
あえて5.6とか用意するクライアント様ってそんなに多いんですか…
0824nobodyさん2012/06/13(水) 19:39:09.52ID:???
違う。5.0系を用意してくれてんの
0825nobodyさん2012/06/13(水) 22:33:10.23ID:???
ありがたいことに5.005を用意してくださっている
ありがたーいお客様ですねわかります
0826nobodyさん2012/06/13(水) 22:37:18.89ID:???
そして客に迷惑をかけて、
それを客のせいにするわけですねw

環境がー、環境がー、
■ このスレッドは過去ログ倉庫に格納されています