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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん03/07/24 19:48ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
083783603/08/10 22:58ID:???
ミスった。
>>835
0838nobodyさん03/08/10 23:00ID:???
>>828
http://perl.infoware.ne.jp/documents/perlboot.ja.html

>>830
$time = sprintf '%02d 時間 %02d 分', $time, ($time * 60) % 60, $time;
0839nobodyさん03/08/10 23:18ID:64afxySW
perlをダラダラ書いてたら、
一つのファイルで、1500 行
を超えてしまいました。
行数が多いと何か不都合は起きますでしょうか?
お教え下さい。
0840nobodyさん03/08/10 23:27ID:STOMuStS
素朴な疑問。なんで、
print qq|<a href="hoge">fuga</a>|;
ってやればコードが見やすいのに、
いちいち
print "<a href=\"hoge\">figa></a>";
ってやってる人が多いんですか?
qqのほうが、コーディングもよけいなことあんまり考えなくて、はやくすむと思うんだけど
0841nobodyさん03/08/10 23:30ID:???
>840
それを見やすいと思うのはPerlユーザーだけ。
俺は使い分けてるけどね。
0842nobodyさん03/08/10 23:30ID:???
>>838
最後の$time要らん。

>>839
そのスクリプトを保守する人間が困らないのなら別に問題無し。

>>840
最初に覚えた方法が一番分かり易いと思い込んでいる人は多い。
もちろんその方法しか知らない人も多い。
084384003/08/10 23:41ID:???
>>841-842 レスさんくす。
なるほどねー。
自分最初にPerlおぼえて、
そのあとちょっとPHPかじって、
Javaおぼえようかなーて思ってる程度だからなー。
0844nobodyさん03/08/10 23:42ID:???
>>841
C#にも@""構文があるのに。Perlユーザだけとは心外だな。
0845nobodyさん03/08/11 00:55ID:???
print "何時間?\n>";
$time =<>;
my(@time_temp) = split(/\./, $time);
chomp($time);
if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;}
time = sprintf '%02d 時間 %02d 分', $time, ($time * 60) % 60, $time;
print "<a href=\"hoge\">figa></a>";
$time_temp[1] = int(60 * $time_temp[1] / 100);
print "$time_temp[0]時間$time_temp[1]分\n";
0846あぼーんNGNG
あぼーん
0847あぼーんNGNG
あぼーん
0848nobodyさん03/08/11 00:59ID:???
#!/usr/bin/perl

# CGIヘッダの出力
print "Content-type: text/html\n\n";

while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}

# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;

# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;

# Player1
$kougeki1 = srand;

# Player2
$kougeki2 = srand2;
0849nobodyさん03/08/11 00:59ID:???
srand;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0850nobodyさん03/08/11 01:00ID:???
srand2;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}

($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;

($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0851nobodyさん03/08/11 01:02ID:???
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで野原でクソをし始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで光浦なみの女にレイプし始めた。</p></p></body>\n";
print "</html>";
0852nobodyさん03/08/11 01:11ID:???
>>840
単に知らないからだと思うが。
0853nobodyさん03/08/11 10:23ID:???
 
0854nobodyさん03/08/11 12:01ID:???
>>839
長くなりすぎると動きません。500行以内じゃないと動きにくいです。
ちゃんと勉強しろ!オタクやろう!!
0855nobodyさん03/08/11 12:03ID:vd5Ibrol
             ________________
     ∧_∧∩ /
    ( ´∀`)/<真珠のPerlと何が違うんですか!?
 _ / /   /   \___________________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||          ||
0856nobodyさん03/08/11 12:04ID:???
      , ' s    \::::::::::::i
     /"""''/ーナ-t----|
.    /   ,.‐   ⌒    /ヘ
    {入|(・)  (・)    |||||||   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
      |⊂⌒◯-------9)  <    まだ、動かないぜ!ベイビー!!
      | |||||||||_    |    \_______
       \ ヘ_/ \ / ̄`\、
.        \、__ i⌒i/, -'"~  `ヽ、
       ,.‐'´   i--i        \
       `〈ヽ, -'"~T  ヽ、 , -'" ~ `ヽ、
       / ( ̄ T   iヽ、__     \.
     /    ( ̄T   |   `ヽ、    }
    く       ̄ `ヽ、/__        /
0857nobodyさん03/08/11 12:07ID:???
   ___________________
   || ($damage < 0) and ($damage = 0);
   || $defense->{'HP1'} -= $damage;はダメージ
   ||           ∧_∧   。
   ||         (  ^^ )/
    ̄ ̄ ̄ ̄ ̄ ̄ (    つ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                /  ̄ ̄ ̄ ./| lヽ──────────────
                | ̄ ̄ ̄ ̄| | | ダメージを受けると、糞をもらします
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|____|/ |
                        ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧ ∧    ∧,,∧   ∧ ∧
    (・,, ∧▲  ミ  ∧ ∧ (  ∧ ∧
  〜(_(  ∧ ∧_( ∧ ∧_ミ・д・∧ ∧
    @(_(,,・∀・)@ (   *)〜ミ_ (   ,,)
      @(___ノ 〜(___ノ    〜(___ノ
0858nobodyさん03/08/11 13:19ID:???
2chって、鯖/カテゴリ/.../dat/
でアクセスして表示しますよね?
これってこの全てのディレクトリの下にindex.htmlか.cgiかなにかを置いてあって、
それを表示してるってことですよね?
でも
鯖/カテゴリ/.../dat/
これでアクセスしたときと、
鯖/カテゴリ/.../dat/index.htmlでアクセスしたときと、
表示が微妙に違うんです。

どういう仕組みで表示させてるんでしょうか?
0859nobodyさん03/08/11 13:42ID:???
>>858
PATH_INFO
詳しくは CGI スレで。
0860nobodyさん03/08/11 13:56ID:???
>>858
http://pc2.2ch.net/test/read.cgi?bbs=php&key=1059043704
http://pc2.2ch.net/test/read.cgi/php/1059043704/
0861nobodyさん03/08/11 14:06ID:???
どーもthxです。勉強してきます
0862nobodyさん03/08/11 14:08ID:???
>>860
あ、なるほど本来(?)なら
bbs=php&key=1059043704
と引数を渡すところを、
PATH_INFOってのを使って、
/php/1059043704/
こういう形で引数を渡すように設定できる

そういうことですね。勉強になりました。
0863nobodyさん03/08/11 18:17ID:???
>>854
俺は14874行の
perlスクリプトを動かしてるが、なんてことはなく
サクサク動いてるぞ。
0864nobodyさん03/08/11 18:26ID:???
単純に行数じゃ判断できないしなぁ。
改行だけなら1〜2バイトだし。
行数よりもファイルサイズが重要でないかい?
0865nobodyさん03/08/11 18:41ID:???
2113行、60KBでサクサク
0866nobodyさん03/08/11 19:59ID:???
10000行、20KBで以下略。
0867nobodyさん03/08/11 20:01ID:???
2701行、85Kbでサクサク
086886303/08/11 20:02ID:???
14874行って書いたけれど、
サイズは623KBだ。
サクサク。

>>854
はマシンのスペックがよっぽどしょぼいか、
しょっぱいスクリプトの書き方してるんじゃないかな。
0869nobodyさん03/08/11 20:04ID:???
10000行で20KB
ってことは、10000行の改行だけのスクリプトってことだな
0870nobodyさん03/08/11 20:04ID:???
あ、ちがった。
KBとBの単位をまちごた。
0871nobodyさん03/08/11 21:26ID:???
最近UTF-8でスクリプト書いても動く事に気付きました。
で素朴な疑問ですがやはりEUCでないとどこかで不都合起きたりしますか?
今のところ何も起きてないけど気になって。
0872nobodyさん03/08/11 21:34ID:???
UTF-8だと問題ないでしょ。
さらに
perl5.8を使って、
use Encode;
でさらに幸せになれます。
0873nobodyさん03/08/12 04:00ID:???
たった50行ですけど、重くて全然動かないですよ。
パソコンの環境によっては500行以下にしなさいってことだ。
0874あぼーんNGNG
あぼーん
0875あぼーんNGNG
あぼーん
0876あぼーんNGNG
あぼーん
0877あぼーんNGNG
あぼーん
0878あぼーんNGNG
あぼーん
0879あぼーんNGNG
あぼーん
0880あぼーんNGNG
あぼーん
0881あぼーんNGNG
あぼーん
0882あぼーんNGNG
あぼーん
0883あぼーんNGNG
あぼーん
0884nobodyさん03/08/12 04:50ID:???
50行で動かないってどういうスクリプトだそりゃ。
または博物館行きのスペックのマシンでも使ってんのか?
0885nobodyさん03/08/12 04:53ID:???
ほっとけ
0886nobodyさん03/08/12 04:55ID:???
>>884
とてつもなく巨大な配列とか使ってたりして(w
0887nobodyさん 03/08/12 05:17ID:???
無限ループすれば一行でもおもくできるが?

つか、おめぇAA貼ってる馬鹿だろ。みんな放置汁
0888nobodyさん03/08/12 05:21ID:???
>>874-882までまた削除依頼でいいだろ
今度はコピペとして依頼してくれって言ってるから、そろそろ(ry
0889nobodyさん03/08/12 05:27ID:???
わざと重くするなら無限ループでもなんでも簡単だが、
50行でうごかねーって騒いでるのは
わざと重くしてるのか?
0890nobodyさん03/08/12 10:40ID:???
すいません、CPANって、なんて読むのでしょうか?
しーぱん?しーぴーえーえぬ?
0891nobodyさん03/08/12 10:50ID:???
しーぱん
0892nobodyさん03/08/12 10:55ID:???
しーぽん
0893nobodyさん03/08/12 11:00ID:???
シパーソ
0894nobodyさん03/08/12 11:41ID:???
>>890
CPAN (See-Pan)
0895あぼーんNGNG
あぼーん
0896あぼーんNGNG
あぼーん
0897あぼーんNGNG
あぼーん
0898あぼーんNGNG
あぼーん
0899あぼーんNGNG
あぼーん
0900あぼーんNGNG
あぼーん
0901あぼーんNGNG
あぼーん
0902あぼーんNGNG
あぼーん
0903nobodyさん03/08/12 11:55ID:???
粘着質だな
0904nobodyさん03/08/12 12:02ID:???
そのうち板ごとアク禁されるでしょ
0905nobodyさん03/08/12 13:34ID:???
>>874以降の分、削除依頼してきた
0906nobodyさん03/08/12 14:43ID:???
激しくPerl初心者で悪いんだが、所有者がWebになってるディレクトリを削除するために(FTPからは削除できない)
それ用の簡単なプログラムを書いてみたんだが500InternalServerErrorになる。ソースをうpするのでご教授願いたい。
ttp://amici.dip.jp/~takuho/cgi/hakoniwa_sakujo.txt
KENTWEB配布の文法チェッカーでは異常なしらしいんだが…。
090790603/08/12 14:44ID:???
失敬、アドレス間違えた。
正しくは、
ttp://nd22.abz.jp/cgi/hakoniwa_sakujo.txt
0908nobodyさん03/08/12 14:56ID:???
>>906
2行目に
print "Content-type: text/plain\n\n";
を挿入
0909 03/08/12 14:57ID:???
だな
0910nobodyさん03/08/12 15:00ID:???
>>906
UNIXで動かしてるのか?
と言うより、CGIとして起動してるのか?

それなら>>908のは必須だよ。
0911nobodyさん03/08/12 15:09ID:Ehp7RR1Q
えー、よく分からないんだが、Windowsで書いたPerlのスクリプトを、Linuxのサーバにうpして走らせてる、でいいのかな?
あと、>>908の言うとおりにスクリプトを変更して走らせたら、なんかDLしますか?みたいなウィンドウが出てきたので、txt/plainをtxt/htmlにしてみたら一応走った。
$sakujp1から$sakujp9までを表示させてみたら全部0 (´Д`;)マジカヨ
0912nobodyさん03/08/12 15:13ID:???
うが、失敬あげてもた
0913nobodyさん03/08/12 15:17ID:???
>>911
ディレクトリは空なんだろうね。
0914nobodyさん03/08/12 15:21ID:???
>>911
txtじゃなくtextなのだが
0915nobodyさん03/08/12 15:22ID:???
>>913
空じゃないといけないのかw
スクリプト書き直します

>>914
ああ、こりゃまた失敬。
ちゃんとtextって書いてますよ。
0916nobodyさん03/08/12 16:29ID:dyQ6VIzM
定数のみを記載したファイルを各CGIにて読み込んで、
各ページで内容を統一したいのですが、以下の方法では
エラーとなってしまいました。
どなたかご教授お願いします。

# main.cgi

require "inc.pl";
・・・・

# inc.pl
my $title = "welcome";
・・・・

よろしくです。
0917nobodyさん03/08/12 16:29ID:???
落ち着いてから喋れよ
0918nobodyさん03/08/12 16:44ID:RiEGcXgN
my %hage = (
 a => "hage",
 b => {
  c => "$hage{a} /hage",
 },
);

こんな感じで$hage{b}{c}で、$hage{a}を使いたいけど、
出来ませんよね?何かいい方法有りませんか?
0919nobodyさん03/08/12 16:47ID:???
my の意味わかってる?
なんでつけてんの
092091903/08/12 16:50ID:???
あ、、>>916あてね
0921nobodyさん03/08/12 16:53ID:???
>>918
どうしても初期化時にやりたいの?
0922nobodyさん03/08/12 16:56ID:???
>>918
my $zura = "hage";
my %hage = (
 a => $zura,
 b => {
  c => "$zura /hage",
 },
);
092391603/08/12 17:07ID:???
解決しました。

根本的に間違えていました。

まず、パッケージ宣言をしていませんでした。
あと、>>920さんのいうとおり、パッケージとして読み込む
内容に対してmyにしていました。

092491803/08/12 17:10ID:???
>>919
実はあんまいみ分かって使ってないかも(汗

サブルーチンの中でその間数内でしか使わない変数は、
myを付けるようにしてる。あと、use strict;してると、
my付けなきゃ怒られるから、、、

>>921-922
一つにまとめた方がすっきりしていいかなーって思いましてね。
やっぱ無理ですかね?
092591803/08/12 17:11ID:???
>>920
あ、俺宛じゃないのね。
失礼。
0926nobodyさん03/08/12 17:35ID:???
>>925
ついでに勉強しておくと良いと思われ。
キーワードはvarsとかourあたりで。
092792303/08/12 19:10ID:dyQ6VIzM
解決したのですが、別の問題が・・・

requireで呼び出す定数の記載されたplファイルが、
ブラウザから丸見えになってしまいます・・・
(見られたくない内容が記載されています)

属性を600にしたら動かないようですし。

ブラウザから参照できないファイルにできないものですか?

よろしくお願いします。

0928nobodyさん03/08/12 19:18ID:???
全然コーディングと関係ないぞ
092992303/08/12 19:23ID:dyQ6VIzM
>>928 失礼しました。流れでついつい聞いてしまいました。

ちなみに拡張子をcgiにしてみると実現できました。
0930nobodyさん03/08/12 19:41ID:???
>>927
そこから先はスレ違いの内容だ。
0931nobodyさん03/08/12 19:42ID:???
.htaccessで観覧不可にすればいーじゃん
0932nobodyさん03/08/12 20:11ID:???
>>932-938まで削除依頼済み
0933nobodyさん03/08/12 20:23ID:???
>>940
運用情報にて規制対象にするのがよいかと。
0934nobodyさん03/08/12 20:31ID:???
>>941
それはいいね。
運用情報をちょっと見てきたけど、コピペや広告がビシバシと
アク禁になっててワラタ。
今後も続いたらそっちに回そう。
0935nobodyさん03/08/12 20:50ID:y42wbWjQ
my $ref_mail = $pop3->get($num);
my $mail = join(/ /, @{$ref_mail});

とかくと、成功したり失敗したりします。
エラーが出た場合のエラー内容は下記のとおりです。

Can't use an undefined value as --.cgi reference

これについて調べてみたのですが、どうも理解が
できません。
定義するとエラーが出てしまいますし、初心者の私に
どうか教えていただければ幸いです。
0936nobodyさん03/08/12 20:57ID:???
あるところに糞スレの好きな男がいた。
男は「(都の人のする)糞スレというものをひとつ立ててみよう」と思った。
男の女房が「(天さかる鄙にすむわたしのような教養のない女でもわかるが)都の人はそんなことをしない(と思う)」
と諌めたが、男はきかない。
「(釈迦入滅以来うだつのあがらない自分という男にほとほと愛想が尽きたが)
ここで糞スレを立てれば(都の人のように)頓知がきいていると世の賞賛を受けるだろう」
と糞スレをたてた。

はたして翌日、>2以降、罵倒の嵐だった。
>1も無駄なことをするものだなあと(何故か判らぬが突然出てくる)横川の僧都(そうず)は嘆いた
レス数が900を超えています。1000を超えると表示できなくなるよ。