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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/05/26 16:48ID:kkhhiYmo
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0040nobodyさん04/05/29 20:08ID:???
>>36
いや、ネタはいいから
0041nobodyさん04/05/29 20:21ID:???
>>40
普通使うぞ。
きちんと配列に格納すれば値をいくつ渡しても配列でらくらく操作。
0042nobodyさん04/05/29 20:23ID:???
普通の基準を聞きたいな。
少なくとも俺は使わない。
今までは使っているソースを見たこともない。
0043nobodyさん04/05/29 20:28ID:???
配列を使わない方が普通と言わんとばかりの煽りだな(プ
0044nobodyさん04/05/29 20:36ID:???
まぁ、使う場合は使うよな。普段はそんなに使わないが
0045nobodyさん04/05/29 21:07ID:???
ifの文章でなら書けるのですがもっと簡単に書ける方法がないか教えてください。

if ($pass eq aa ) { $name = "ああ";}
if ($pass eq bb ) { $name = "いい";}
if ($pass eq cc ) { $name = "うう";}
if ($pass eq dd ) { $name = "ええ";}
 ・
 ・
みたいなのがずっと続くんですが。。
0046nobodyさん04/05/29 21:23ID:???
my $name_list = {'aa' => 'ああ' , 'bb' => 'いい' , 'cc' => 'うう' , 'dd' => 'ええ'};
$name = $name_list->{$pass};
0047nobodyさん04/05/29 22:12ID:???
>>45
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html#Basic_BLOCKs_and_Switch_Statemen
0048nobodyさん04/05/29 22:39ID:???
>>42
CGI.pmが許しているというのは普通の基準にはならないかね。
0049nobodyさん04/05/29 22:44ID:???
>>42みたいに経験が乏しかったり勉強不足の奴が見たことないとか言ってもなぁ・・・
0050nobodyさん04/05/29 23:04ID:???
そんなにいじめるなよ
初心者はこうして一つ一つ知識を蓄えていくんだから生暖かく見守ろうぜ
0051nobodyさん04/05/29 23:05ID:???
>>42を翻訳機に通してみた。

普通の基準は俺。
少なくとも俺は使い方が分からないから使えない。
今まで他人のソースを見たこともない。
0052nobodyさん04/05/29 23:07ID:???
checkboxのnameにせっせと異なる名前を付けているのはある意味滑稽だな。
0053nobodyさん04/05/29 23:13ID:7xFl3dBX
URL入力のフォームにデフォルトのvalueで「http://」を入れてます。
それしかなかった場合に変数$homeに「URL」を、
http://の後ろに入力されてた場合$homeにアンカー付きの「<a>URL</a>」を入れたいと思ってます。

【書いたソース】
if ($in{'url'} == "http://") { $home = "URL"; }
else { $home = "<a href=\"$in{'url'}\" target=\"_blank\">URL</a>";}

こうすると、http://の後に入力していてもアンカー無しの「URL」が表示されてしまいます。
間違いをご指摘ください おねがいします!
0054nobodyさん04/05/29 23:19ID:???
>>53
演算子について学ぼう
0055nobodyさん04/05/29 23:21ID:???
>>53
http://www5a.biglobe.ne.jp/~n_rieko/perl/5.htm#5-4
0056nobodyさん04/05/29 23:34ID:???
>>54-55
_| ̄|● お恥ずかしい

if ($in{'url'} eq "http://")
で解決しました。
ありがとうございました!
0057nobodyさん04/05/29 23:44ID:???
>>52
それが普通
0058nobodyさん04/05/29 23:52ID:???
>>57 無知を指摘されたからってそんなむきにならなくてもいいんジャマイカ。
0059nobodyさん04/05/30 00:19ID:???
使わないって言ってる人は理由があるの?
必要ないからっていうのは無しね。
使うことによって、楽になる場面はいっぱいあるんだし。
0060nobodyさん04/05/30 00:22ID:???
checkboxにまで無理して噛み付く奴の知識ってどの程度なのだろう。
htmlもろくに出来ないのにプログラミングですか。
それはそれで凄いですね。
0061nobodyさん04/05/30 00:34ID:???
あれでしょ、今ごろHTMLの仕様とか読んで自分の誤りに
気づいて顔真っ赤にしてるんでしょ。
0062nobodyさん04/05/30 00:54ID:gNGGvGZX
ちょっとみなさんバカなボクに知恵をかしてください

カウンタのような役目をしている変数$winというのがあるんですが
この$winが100の倍数ごとにある処理をしています。

そこで$win_nextという変数で次の100までの回数を表示したいのです。
例えば$weが48だと$we_nextが52となったり、281だったら19になったり、といった風な感じです。

いろいろやってみましたが何回やってもできません。

↓例えばこういう風なのとか・・・
$win_next=($win+100-($win-($win/100*100)))-$win;
0063nobodyさん04/05/30 01:00ID:???
>>62 お前も演算子に付いて学ぼう
0064nobodyさん04/05/30 01:14ID:???
>>34=>>40=>>42=>>57で合ってるよな?
恥ずかしいやつが一人しかいなくてよかったよ・・・
0065nobodyさん04/05/30 01:15ID:???
>64
少なくともその一つだけ俺だから違う。
0066nobodyさん04/05/30 01:24ID:???
二人も居たのか?
それはそれで兵共が集うスレですね。
0067nobodyさん04/05/30 01:30ID:???
>>62
$win % 100 は100で割った余りに相当する。
0068nobodyさん04/05/30 01:50ID:???
>>65
そうか、どいつなのかはわからんが。
個人的趣味で異なる名前を付けるならそういうコーディングスタイルなのだろう。
でも避けるべきとか普通は使わないとか見たことないとかは明らかに
無知あるいは応用が利かないとしか言えないな。
もうちょっといろいろ勉強したほうがいいね。
0069nobodyさん04/05/30 01:51ID:???
>>59
きっと、KENTやレスキューが使ってないからだよ。
0070nobodyさん04/05/30 02:00ID:???
>>68
いつまで粘着してんだ?
キモイぞ
0071nobodyさん04/05/30 02:04ID:???
レス番間違えたの?
それとも粘着の意味を取り違えてるの?
0072nobodyさん04/05/30 02:08ID:???
うわ。。。
痛すぎる
自分が粘着してることに気づいてない粘着は一番嫌われるよ。
まぁ、リアルでそうなんだろうが
0073nobodyさん04/05/30 02:09ID:???
>>68=>>71
もういいよ
0074nobodyさん04/05/30 02:10ID:???
>>71
これを機に、日本語学んでみてはいかがでしょうか?
0075nobodyさん04/05/30 02:12ID:???
まぁ餅付け
0076nobodyさん04/05/30 02:13ID:???
75 名前: nobodyさん [sage必死に当り散らしてるなカナリイタイ] 投稿日:04/05/30 02:12 ID:???
まぁ餅付け



いや、お前が一番痛いよ・・・
メル欄引っ掛けとかキモ杉
0077nobodyさん04/05/30 02:14ID:???
>>76
>>75は誰か引っかかると思って書いてるんだよ
メル欄晒しはもう少し待ってやるべきだった。
今>>75ないてるぞ・・・
俺知らない
0078nobodyさん04/05/30 02:15ID:???
>>68=>>71=>>75
もういいよ
0079nobodyさん04/05/30 02:15ID:???
877 :nobodyさん :04/05/30 02:02 ID:???
perlを勉強中です。

CGI呼出し時にurlの引数に配列を直接入れる事は可能でしょうか?

PHPでは出来ると聞いて、perlでやってみてるのですが上手くいきません。

具体的には、以下の様にしました。
hoge.cgi?huga%5B%5D=1&huga%5B%5D=2&huga%5B%5D=3

また、この方法が無理な場合は、$huga=1,2,3で代入して送って
受け取ったCGIで@huga=(1,2,3)で代入したいのですが、urlの
; / ? : @ & = + $ ,
以上は特別な意味を持つようなのですが、
, を %2Cにエンコードして送信すれば問題有りませんでしょうか?

おまえらにタイムリーな話題ですよ
http://pc5.2ch.net/test/read.cgi/php/1078568723/l50
0080nobodyさん04/05/30 02:16ID:???
納得させられる説明ができなくて粘着どうこうしか言えないのはかなりイタイな。
0081nobodyさん04/05/30 02:16ID:???
>>80
だからいつまで粘着してるの?
0082nobodyさん04/05/30 02:17ID:???
checkboxの変数名ごときでここまで荒れる>>80が素敵☆
付き合おうよ★
0083nobodyさん04/05/30 02:22ID:???
>>81
だからいつまで粘着してるの?
0084nobodyさん04/05/30 02:23ID:???
今度は顔真っ赤にしてオウム返しか
典型的な厨房だな。
宿題して寝ろよ
0085nobodyさん04/05/30 02:25ID:???
とりあえず言えること

checkboxを学べ
それは板違いだ

お前ら板違いの話題で良くここまで盛り上がれるな。
0086nobodyさん04/05/30 02:26ID:???
>>80=>>85
傍観者側に回ったフリ乙
0087nobodyさん04/05/30 02:27ID:???
>>86
だな

>お前ら板違いの話題で良くここまで盛り上がれるな。
コレは仕掛けた本人が必ずといって良いほど言う
0088nobodyさん04/05/30 02:29ID:???
と説明できないやつが必死に叩こうとしてるw
0089nobodyさん04/05/30 02:37ID:???
もういいよ
w=必死
0090nobodyさん04/05/30 02:44ID:???
>>89
やっと自分の間違いを認めたか。
わかったよ。
0091nobodyさん04/05/30 02:48ID:???
>>90
レス番間違えたの?
それとも日本語を理解できてないの?
0092nobodyさん04/05/30 02:52ID:???
>>91
これを機に、日本語学んでみてはいかがでしょうか?
00936204/05/30 03:14ID:???
%を忘れてました_| ̄|〇
愚問スマソ
0094nobodyさん04/05/30 04:31ID:???
perlでスクリプト組んでいて、Flashのサイズを取得するためにPHP+GDを使いたいんですが
perlからサイズ取得スクリプト(PHP)を実行して帰って来た結果をperl側で取得することは不可能でしょうか?
教えて下さい。お願いします。
0095nobodyさん04/05/30 04:36ID:???
可能


はい、終わり。
後はグーぐるでね
0096nobodyさん04/05/30 11:27ID:???
     /\⌒ヽペタン
    /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;) < 餅つけ
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
0097nobodyさん04/05/30 17:22ID:???
>>94
こんなモジュールを見つけたよ。
http://search.cpan.org/~ysas/SWF-File-0.33/lib/SWF/Parser.pm
&headersubコールバックを定義しておけば、perlだけで情報が取れそう。
00989404/05/30 17:43ID:???
>>97
``;でコマンドラインからPHPを実行してサイズ取得できました。
そのモジュールも検討してみます。
ありがとうございました。
0099nobodyさん04/05/30 20:27ID:???
思い通りにいきません。エラーが出ます。。
どのように書き直せばいいのでしょう?

$i1,$i2 = split("_",$name);
$name = $i1$i2;
0100nobodyさん04/05/30 20:31ID:???
>>99
安いのでいいから一冊本買った方がいい
0101nobodyさん04/05/30 20:43ID:???
>>99
検索で調べることもできないような人の来るところではありません。
0102nobodyさん04/05/30 20:49ID:???
>>99
スレの趣旨には合っているがあまりに酷すぎる。>>100の言うとおりに教科書買え。

($i1,$i2) = split("_",$name);
01039904/05/30 21:48ID:???
>>100-102
すいません。一応教科書など持ってます。
()は完全にわすれてました・・。
が、()をつけてもエラーが出ます。。
0104nobodyさん04/05/30 21:50ID:???
じゃあ、別の場所でエラーが出てるんだろ。
エラーログをよく見ろ。
01059904/05/30 22:07ID:???
Scalar found where operator expected at ../bbs/bbs.cgi line 651, near "$i1$i2"
(Missing operator before $i2?)
syntax error at ../bbs/bbs.cgi line 651, near "$i1$i2"
../bbs/bbs.cgi had compilation errors.

なんですが。
0106nobodyさん04/05/30 22:07ID:???
>>103
学校でせんせーに聞いてこい。

$name = $i1 . $i2;
0107nobodyさん04/05/30 22:47ID:Mg+ccEmx
はずかしいな
0108nobodyさん04/05/30 22:53ID:???
2行にバグ2個も書くな。
0109nobodyさん04/05/31 00:25ID:???
まあスレタイに相応しい質問だけどな(w
0110nobodyさん04/05/31 01:09ID:???
ここは初心者が自信を持てるインターネットですね。
0111nobodyさん04/05/31 06:12ID:???
たまに日本語すら危うい質問があるから、それに比べたら…
0112nobodyさん04/05/31 22:39ID:1T44mYBt
質問
list.txtの、一番上の行にテキストを追加したいのですが

open(OUT, ">> list.txt");
@list = <OUT>;
unshift (@list,"追加の行<br>\n");
print(OUT "@list");
close(OUT);

このようにやると、一番下の行に追加されます。
どこが間違ってるのでしょうか?
0113nobodyさん04/05/31 22:45ID:???
ここ>>open(OUT, ">> list.txt")
0114nobodyさん04/05/31 22:45ID:???
openの使い方を学べ
0115nobodyさん04/05/31 22:52ID:???
2、3のレスで解決する質問ばかりでのどかだな〜
011611204/05/31 23:05ID:???
おかげさまで!
open(IN, "list.txt");
@list = <IN>;
unshift (@list,"追加の行<br>\n");
close(IN);
open(OUT, "> list.txt");
print(OUT "@list");
close(OUT);

できましたぁー!
読み込みと書き出しは同時にできないってことでしょうか?
0117nobodyさん04/05/31 23:08ID:???
>>116
>>114
0118nobodyさん04/05/31 23:08ID:???
>>116
できますからもっとよく調べてください
011911204/05/31 23:12ID:???
>>118
ありがとう・・・
しらべるっち!!
0120nobodyさん04/05/31 23:41ID:???
今、CGI本片手に掲示板を作っているのですが、
特定の状況?(原因が不明)で下記のエラーが出てしまいます。

Illegal division by zero at C:\www\home\bbs.cgi line 2020.

エラーが出ない場合は普通に書き込めるのですが・・・。
自分なりに原因を探ってはみたのですがお手上げです。
何卒ご教授下さい。宜しくお願いします。
0121nobodyさん04/05/31 23:44ID:???
>>120
スレ違い。
つーか、どこで聞いても同じ。
なぜエラーメッセージを読まない?
0122nobodyさん04/05/31 23:58ID:???
いつも通り

英 語 が 読 め な い ん で す

とかじゃねーの
どちらにせよ典型的な真性厨ですな
0123nobodyさん04/05/31 23:58ID:???
>>120は、割り算ってケーキを人の数で割ることだから
ケーキを0人で割ると誰にも分けなくていいから全部わたしのもの、とか考えてるツルペタ。
012419-2204/06/01 00:18ID:???
>>23-24

できました!ありがとうございます。
レス遅くなってすみません。
012511204/06/01 00:46ID:g7eZEVaT
すいませーん追加で質問です。
>>116のようにして書き足していったlist.txtを覗くと、データが

追加の行<br>
 追加の行<br>
  追加の行<br>
   追加の行<br>

のようにヘンなインデントがついてるんです
なぜでしょうか?
0126nobodyさん04/06/01 00:57ID:???
<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#Scalar_value_constructors">
配列変数は、ダブルクォート文字列中で、配列のすべての要素を変数 $"
(Englishでは $LIST_SEPARATOR) 中に示す区切り文字 (デフォルトは
スペース) でつなげて展開されます。以下は同値です:

  $temp = join($", @ARGV);
  system "echo $temp";

  system "echo @ARGV";
</q>
0127nobodyさん04/06/01 06:06ID:???
なんでprintするときリストを""で囲むかね。
たぶんスカラー変数を""で囲むのを普段から何の疑いも無くやっていて、その延長で
リストを囲んだらおかしくなったってパターンなんだと思うけど。
そうやれ!とか書いてある参考書でもあるの?
0128nobodyさん04/06/01 07:54ID:???
答えろよ
0129nobodyさん04/06/01 10:22ID:???
print "@data"と
print @data
はPerlだと挙動が違うんだよねぇ
勉強しろよ
013011204/06/01 11:58ID:???
>>127-129
ありがとうございました。勉強になりました。
ソースは他人のソースを参考に書きました。
0131nobodyさん04/06/03 20:11ID:???
イメージ検索エンジンを作ろうとしているんですが、
画像に埋め込まれているメタデータとキーワードが一致しているかどうかで、
検索をしているイメージ検索エンジンってありますか?

<img src="map.jpg" alt="地図" title="日本地図">
↑のaltやtitleの部分や画像周りのテキスト、ファイル名などを
検索するのがGoogleだと思うんですけど、
画像に組み込まれている日付だとか著者とかをキーワードと一致するか、
検索するシステムが無ければ作ろうと思うのですが、
どなたか上記のような検索システムがあれば、教えてください。
無ければトライしてみようと思います。
0132nobodyさん04/06/03 21:05ID:???
>>131
スレ違い
0133nobodyさん04/06/04 07:10ID:???
varatermを使ってるんですが、シェル(bash)の標準入力ではbackspaceで
後の1文字を消せるんですが、スクリプトで<STDIN>で入力する時に、
backspaceを使うと、^Hが表示されて文字を消すことができません。
どうすれば文字を消せるようになるのでしょうか。
Perl 5.6.1、Debian 3.0を使っています。
0134nobodyさん04/06/04 07:25ID:???
>>133
それはソフトの問題じゃないのか?
0135nobodyさん04/06/04 07:33ID:???
>>133
^H返すのってわりと普通の動作じゃないんですか?よく聞くんですけど
俺のスクリプト使う奴は全員backspaceコードに^H使うな!
とは言えないので…。
0136nobodyさん04/06/04 08:42ID:???
>>133
それ、Debianのせいじゃない?
どのバージョンでどうなのかは知らんけど。
ttp://www.fastwave.gr.jp/diarysrv/mad-p/200205c.html#20020525-1
Linux板のほうがいいかも。
0137nobodyさん04/06/04 10:24ID:???
>>136
あー、なるほどそうだったんですか…。
どうもありがとうございました。
0138nobodyさん04/06/05 07:36ID:HWhcKEoW
今170行ほどのプログラムを書いたのですが、可視性が悪いので処理ごとにサブルーチンかしようかと思うのですが
それだと処理の重さ軽さなどは変わりますか?
0139nobodyさん04/06/05 07:47ID:???
ベンチマークとってみれ
0140nobodyさん04/06/05 09:45ID:HWhcKEoW
>>139
どうやるの?
■ このスレッドは過去ログ倉庫に格納されています