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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/08/06(水) 22:54:32ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0759nobodyさん2009/02/02(月) 20:36:37ID:???
>>758
> 典型的なケアレスミスでお恥ずかしいかぎりです。

あんまり謙遜すると、キチガイにつけ込まれるよ。
0760nobodyさん2009/02/02(月) 21:17:04ID:???
sub a{
&a
sub b{
}
}
このサブルーチンの使い方は間違っていますか?
0761nobodyさん2009/02/02(月) 21:28:52ID:???
>>760
何をしたくてそう書いたの?
0762nobodyさん2009/02/02(月) 23:25:18ID:???
Markdownのような記法からS5のようなスライドのHTMLを生成するモジュールをご存じであれば教えていただきたいです。
0763nobodyさん2009/02/02(月) 23:56:04ID:???
>>761
見た目がわかり易かっただけですorz

0764nobodyさん2009/02/02(月) 23:58:27ID:???
$a[1..9] = $b[1..9];
この記述はあってますか?

いったいどこが悪くて動かないのかわからないので総当り中。
0765nobodyさん2009/02/03(火) 00:00:23ID:???
>>764
まあ、まずは落ち着いて、君のPCにPerlを入れないか。
0766nobodyさん2009/02/03(火) 00:09:30ID:???
>>764
それ @a = @b; でできるよ
0767nobodyさん2009/02/03(火) 00:12:32ID:???
>>766
インデックスの0だけを据え置いて配列の内容を交換したいのですorz
0768nobodyさん2009/02/03(火) 00:12:39ID:???
@a = @b;

だと

@a[0..9] = @b[0..9];

になる気がする。

@a[1..9] = @b[1..9];

か。脳内だけど。
0769nobodyさん2009/02/03(火) 00:19:34ID:???
@a = @b;
shift(@a);
unshift(@a, $b[0]);
0770nobodyさん2009/02/03(火) 00:57:59ID:???
useするだけで色んなサブルーチンが使えるようになるモジュールって、全部use base "Exporter"してour @EXPORTにサブルーチン名代入する作りになってるんですか?
0771nobodyさん2009/02/03(火) 01:03:32ID:???
Perlのスライスは分かりづらいよな。何で@にしたんだろ。
0772nobodyさん2009/02/03(火) 01:56:59ID:???
a[0..9]が表すものはリストだから
a[0]ならスカラーだから$なのと一緒
0773nobodyさん2009/02/03(火) 02:11:03ID:???
$ @ % & などは、変数とかを表すものでなく、
実は一貫してアクセスの種類示すものとして使われている。

$aaa; #「スカラー変数aaa」ではなくて「スカラー名aaaへのアクセス」

>>770
オブジェクトじゃなければ、だいたいそう。
ひねくれ作者だったら知らん。
0774nobodyさん2009/02/03(火) 08:12:43ID:???
検索どころか、ちょっと試せば分かることをなぜ試さないのか。
質問者は>>1を熟読した上で、質問してほしい。
0775nobodyさん2009/02/03(火) 14:14:36ID:???
>>774
そんな風に煽るから、やる気なくすんじゃないの。
0776nobodyさん2009/02/03(火) 14:17:47ID:???
>>774
答えたい人が答えればいいだけだから、
スルーしろよ。
0777nobodyさん2009/02/03(火) 14:40:43ID:???
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
0778nobodyさん2009/02/03(火) 15:52:49ID:???
>>777
荒らすな>>774
0779nobodyさん2009/02/03(火) 16:38:22ID:???
>>773
それ本読んだ事ある人なら知ってる内容だよね
0780nobodyさん2009/02/03(火) 19:46:43ID:???
@a = shift(@a) ;
unshift (@a , 1) ;

この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?
0781nobodyさん2009/02/03(火) 19:55:35ID:???
店長、ネタレス>>780入りました。
0782nobodyさん2009/02/03(火) 20:55:27ID:???
perlは実は無料です。ソースも公開されています。
0783nobodyさん2009/02/03(火) 20:57:12ID:???
オープンソースだからねぇ
0784nobodyさん2009/02/03(火) 21:29:51ID:???
>>780
> この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?

use strict;
use warnings;

の 2 行を、perl スクリプト全部の先頭に付けると、
記述があってるかどうかおしえてもらえるよ。

Windows に入る perl は、ActivePerl というのと Strawberry Perl の
2 つがあるよ。
0785nobodyさん2009/02/03(火) 21:35:22ID:???
Windowsで使用している人のほとんどがActivePerlだと思う
0786nobodyさん2009/02/03(火) 21:38:31ID:???
windowsで鯖公開してる人が多いのか?
0787nobodyさん2009/02/03(火) 23:31:26ID:???
Windowsで開発しても、運用まではやらないんじゃないか。
0788nobodyさん2009/02/04(水) 00:12:55ID:???
開発は本番の環境に似せた環境で作るから
Winで使わないならWinで開発しないだろ、jk
0789nobodyさん2009/02/04(水) 00:28:31ID:???
開発、運用にwindowsを選ぶ理由がわからん
0790nobodyさん2009/02/04(水) 00:30:49ID:???
昔からWin鯖で動いてたシステムなら改修で弄った事あるけど
弄った後にWin鯖は入れ替えでRHELに入れ替わってたな
0791nobodyさん2009/02/04(水) 01:09:23ID:???
今はvmwareとかcolinuxがあるからなあ。
0792nobodyさん2009/02/04(水) 01:24:33ID:???
実機用意しなくて済むようになったのは良い事
0793nobodyさん2009/02/04(水) 03:05:51ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
0794nobodyさん2009/02/04(水) 04:42:54ID:???
>>793
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
0795nobodyさん2009/02/04(水) 05:07:43ID:???
>>793
>ミスはないでしょうか?

動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
0796nobodyさん2009/02/04(水) 05:15:04ID:???
>>794
移動します。
0797nobodyさん2009/02/04(水) 07:09:52ID:???

@a = @b
shift(@a) ;
unshift (@a , 1) ;

この表記でバグってるような気がします


ちなみにjperl日本語版をベクターでダウンロードしましたがインストーラーが見当たりません。
ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
0798nobodyさん2009/02/04(水) 11:33:59ID:???
a とか b だけの変数名は使うなバカチン

unshift(@a , 1);
第二引数は配列でアレ!
0799nobodyさん2009/02/04(水) 21:14:31ID:???
>>797
> この表記でバグってるような気がします
http://www.e777.co.jp/perlcw/perlcw.html

> ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
http://www.activestate.com/activeperl/
0800nobodyさん2009/02/04(水) 23:10:49ID:???
ぜろちゃんねるスクリプト use strict; すらしてねぇ
0801nobodyさん2009/02/05(木) 07:17:41ID:???
strict.pmが鯖に必ずしも入っていなかったからだと思うよ
0802nobodyさん2009/02/05(木) 09:39:18ID:???
弄られるってのも考えてると思う
0803nobodyさん2009/02/05(木) 10:22:36ID:???
>>801
> strict.pmが鯖に必ずしも入っていなかったからだと思うよ

そういう鯖って今もあるの?
あるとして使う積極的な理由は見つからない。
use strict; しないスクリプトは消えるべきかと。
0804nobodyさん2009/02/05(木) 10:33:23ID:???
世の中そう簡単じゃないんだよ
0805nobodyさん2009/02/05(木) 10:37:35ID:???
作る時は
-Tオプション
use strict;
use warnings;
つけるけど、納品するときは外すよ
0806nobodyさん2009/02/05(木) 11:13:47ID:???
>>805
どういう理由があって外してるの?
0807nobodyさん2009/02/05(木) 11:20:17ID:???
>>806
納品前に外す趣旨の発言は、この板で何度か出てきてるね。
外すと書くだけで、合理的な理由を示さない人だから、構わない方が良いよ。
0808nobodyさん2009/02/05(木) 11:34:34ID:???
>>807
>>801
可能性がゼロじゃないわけで。
ログはきまくるっていうのもあるのかな
0809nobodyさん2009/02/05(木) 12:05:01ID:???
>>808
Perl で飯食うの辞めるといいと思う。
0810nobodyさん2009/02/05(木) 12:15:13ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
0811nobodyさん2009/02/05(木) 12:21:03ID:???
> ミスはないでしょうか?

お母さんのおっぱい揉みながら聞いてみるといいよ
0812nobodyさん2009/02/05(木) 12:22:33ID:???
移動したんじゃないのかよw
0813nobodyさん2009/02/05(木) 12:23:39ID:???
移動先で放置食らってるんだろw
0814nobodyさん2009/02/05(木) 12:42:41ID:???
ソース見たけど嫌になった
0815nobodyさん2009/02/05(木) 13:24:44ID:???
>>810
>ミスはないでしょうか?

動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
0816nobodyさん2009/02/05(木) 13:33:51ID:???
技術者としては死んでいるね。そもそも技術者ではないか。
0817nobodyさん2009/02/05(木) 14:00:44ID:???
strictプラグマwarningsプラグマ
http://d.hatena.ne.jp/lapis25/20090204/1233757194

両エントリktkr
0818nobodyさん2009/02/05(木) 15:30:00ID:???
>>809を見る限り、合理的な理由を示さないのは外さない派だなw

>>817
モダン(笑)
0819nobodyさん2009/02/05(木) 16:35:05ID:???
>>808
> 可能性がゼロじゃないわけで。

これについて、何の可能性なのかよくわかんないんだよね。
>>801 でいう「strict.pmが鯖に必ずしも入っていな」い可能性がゼロなのか、
use strict; use warnings; したときに出てしまうメッセージを潰しきれない
のがゼロなのか。

> ログはきまくるっていうのもあるのかな

そもそも何のログが出てくるのかと。
use strict; use warnings; しているときに何か出てくるのであれば、
それは必ず潰さなければらなない。
そんなものが出てくる時点で何かおかしいことをしている。
例外的に、わかってておかしいことをしたい場合は、その箇所に関しては、
個別的に黙らせればよい。
0820nobodyさん2009/02/05(木) 16:42:43ID:???
use ***;書いてたらそれだけで処理に時間がかかるからじゃね?
0821nobodyさん2009/02/05(木) 16:44:10ID:???
use strict; 外す派って、テストの時 use strict; つけてテストした後に、
外してもう一回テストやるの?面倒くさくない?
0822nobodyさん2009/02/05(木) 16:49:06ID:???
> use ***;書いてたらそれだけで処理に時間がかかるからじゃね?

どのくらいの時間がかかるの?
ベンチとか取ってるのなら見てみたい。
0823nobodyさん2009/02/05(木) 16:50:25ID:???
>>821
use strict; 外す派は、テストの概念が存在しない世界の人たちである気がする。
0824nobodyさん2009/02/05(木) 16:57:02ID:???
おれが>>594で聞いたときも答えてくれなかったから教えてくれないでしょ
0825nobodyさん2009/02/05(木) 17:07:07ID:???
use strict; use warnings; 付けないと死刑派のおれがテストしてみた
1000 回まわしてトータルで 0.3 秒の差だね。
行数多くなると少し変わるんだろうけど、この小さな差をどうにかしないと
いけない状況って本当にあるの?

# --- run.sh
#!/bin/bash
time bash call_strict.sh
time bash call_no_strict.sh

$ bash run.sh

real 0m5.904s
user 0m3.828s
sys 0m1.824s

real 0m2.561s
user 0m1.116s
sys 0m1.784s

# --- call_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_strict.pl 2>/dev/null 1>/dev/null
done

# --- call_no_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_no_strict.pl 2>/dev/null 1>/dev/null
done
0826nobodyさん2009/02/05(木) 17:07:48ID:???
# --- call_strict.pl
#!/usr/bin/perl

use strict;
use warnings;

my ($a, $b, $c);
$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;

# --- call_no_strict.pl
#!/usr/bin/perl

$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;
0827nobodyさん2009/02/05(木) 17:17:53ID:???
use strictしない(最終的に消す)派とか言ってるやつがuse CGIとかやってたりするんだろうな
0828nobodyさん2009/02/05(木) 17:54:21ID:???
何と戦ってるんだ
0829nobodyさん2009/02/05(木) 18:33:37ID:???
どこで誰が戦ってるの?
0830nobodyさん2009/02/05(木) 18:39:27ID:???
人は色々なところで戦ってるんだ
0831nobodyさん2009/02/05(木) 18:41:08ID:???
上條恒彦の歌思い出した
0832nobodyさん2009/02/05(木) 19:56:17ID:???
コンパイルが簡単にできればすべては解決なんだろうな。
0833nobodyさん2009/02/06(金) 01:05:07ID:???
strict使わない馬鹿なんかに構うことないだろお前ら
0834nobodyさん2009/02/06(金) 02:46:43ID:???
燕雀安んぞ鴻鵠の志を知らんや
0835nobodyさん2009/02/06(金) 03:03:25ID:???
>>825
計測したことがないけど、warning.pmは重くてstrict.pmはほとんど負荷がない、とドキュメントに書いてあったと思う。
だから俺はuse strictして、-wオプション付きでテストさせている。
0836nobodyさん2009/02/06(金) 03:09:28ID:???
warningsと-Tオプションは納品時に外すがstrictは外さないでしょ
0837nobodyさん2009/02/06(金) 09:50:05ID:???
負荷以前にstrictがないプログラムは怪しいぞw。不信すぎる。
0838nobodyさん2009/02/06(金) 12:54:45ID:???
warnings も strict も -W も外さない
外して焦ってサポートに電話してくりゃ、そりゃ商機なんですよw
下手に改造されてワーニング放置で動かされて、とある日にぼろぼろのソースを直せと言われるより、
早期にワーニング出てもらって、修正依頼に対して「そちらが勝手に改造したので新規料金相当頂きます」のほうがいいんですよ
ちったぁ考えろって
0839nobodyさん2009/02/06(金) 13:15:50ID:???
このスレの統一的見解は、

「納品時には use strict; use warnings; を外す」

でよろしいな?
0840nobodyさん2009/02/06(金) 13:27:58ID:???
なんでだよw
0841nobodyさん2009/02/06(金) 14:26:30ID:???
モダンなPerlerは外さない
0842nobodyさん2009/02/06(金) 14:49:52ID:???
>>838
商品でどうこう言ってるくせに-Tオプションを使ってないのは胡散臭い
0843nobodyさん2009/02/06(金) 14:58:25ID:???
-T つかうとどんなことが出来るのか、初心者のおれに教えてくれ。
0844nobodyさん2009/02/06(金) 15:20:39ID:???
>>838
相手が勝手に改造するのと、strictとwarningsは関係なくね?
0845nobodyさん2009/02/06(金) 15:22:58ID:???
他社に納品ってしたことないから分からんかった
0846nobodyさん2009/02/06(金) 15:24:01ID:???
>>842
-T は使ったことないから知らないから、-T でどんな機能が働くのか教えてくれ
0847nobodyさん2009/02/06(金) 15:31:52ID:???
ググった
自分のスクリプトを -wT で動くようにしてみよう

ありがと >>843
0848nobodyさん2009/02/06(金) 15:32:13ID:???
>>842 だったw
0849nobodyさん2009/02/06(金) 15:34:06ID:???
>>847
良く書けていたサイトがあれば教えて欲しい。
0850nobodyさん2009/02/06(金) 15:34:13ID:???
>>843
>>846

つ 汚染チェック
0851nobodyさん2009/02/06(金) 15:37:21ID:???
PerlでWebプログラミングしてて-Tの汚染チェック知らないとかヤバいだろw
0852nobodyさん2009/02/06(金) 15:46:56ID:???
>>847
つ 確認用オプションは-wTcがオススメ
0853nobodyさん2009/02/06(金) 16:29:24ID:???
$bosyu の値が1ならば、登録フォームを表示させる。
0ならば、登録フォームを表示させない。
1か0かは、管理人用ページから設定することができる。 という感じでPerlを組みたいのですが、
まだまだ初心者でよく分かりません。
一応、
<input type=radio name=bosyu value=1>表示する
<input type=radio name=bosyu value=1>表示しない
というフォームを作り、登録フォームの表示部分に、
if ( $bosyu == 1 ){
 #登録フォーム
}
else {}
というようにしました。
しかし、管理人画面から1にしようが0にしようが、登録フォームはどのみち消えてしまいました。
この場合、どうしたらよいのでしょう?;
08548532009/02/06(金) 16:30:28ID:???
<input type=radio name=bosyu value=1>表示しない
正しくは、
<input type=radio name=bosyu value=0>表示しない

でした。申し訳ありませんが、ご教示願いますm(_ _)m
0855nobodyさん2009/02/06(金) 16:36:45ID:???
要するに、$bosyuに1がセットされないってことでおじゃるか
URLデコード的なものをしてないんじゃ?
0856nobodyさん2009/02/06(金) 16:46:23ID:???
>>855 さん
ありがとうございます。m(。。;)m
URLデコード・・・ですか?今から検索かけてみます;

もしよろしければ、
http://www.77c.org/d.php?f=nk5918.lzh
に本体をアップロードしましたので、修正箇所など教えていただけますと助かります。
私自身が追加しましたのは、行381,行382,行678,行683,行684 になります。
0857nobodyさん2009/02/06(金) 16:51:07ID:???
$bosyuじゃなくて$FORM{bosyu}でやってみれ
0858nobodyさん2009/02/06(金) 17:05:24ID:???
$bosyu == 1
ってやりたいなら明示的に int(入力値) ってやったほうがいい
でなけりゃ 0 or 1 じゃなくて TRUE or FALSE にして、eq を使うとか
■ このスレッドは過去ログ倉庫に格納されています