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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
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
どうやるの?
0141nobodyさん04/06/05 09:49ID:???
use benchmark;
0142nobodyさん04/06/05 13:37ID:tmR5KH99
ひらがなをカタカナに変換したいのですが、以下のようにするとなぜか"アゥ"と出力されます。何故なんでしょうか?
(UNIX, perl v5.8.0)

#!/usr/bin/perl
$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;
0143nobodyさん04/06/05 14:05ID:???
ひらがなやカタカナがマルチバイトだから。
0144nobodyさん04/06/05 14:41ID:6aQba7Dj
>>142
解決策1: Jcodeモジュールのtrを使う

use Jcode;
$str = "あい";
print Jcode->new($str)->tr('あいうえお','アイウエオ');

解決策2: unicode機能を使う

use utf8;
use encoding 'euc-jp', Filter=>1;

$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;

use encodingのとこのeuc-jpは適当に自分が使っている
コードにあわせてくれ。
0145未承諾広告※ ◆TWARamEjuA 04/06/05 15:05ID:CuLBZ8wK
>>144
5.8.0 環境とのことですので後者の方ですね。
0146nobodyさん04/06/05 15:06ID:???
フォームを使わずに、POSTでデータを送る事は出来ませんか?
0147プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)04/06/05 15:21ID:???
プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)
の2ちゃんねるワンポイントアドバイスの時間です。

長年プロ固定してますので、削除とか他人のIP抜き取り個人情報調べ、
2ちゃんねるのアングラの仕事など西村博之の右腕として広範囲な仕事を
任されております。一般に2ちゃんねるは、収益を上げてない個人管理の掲示板
かのように思われていますが、各トピックごとに様々な人間がアクセスしてくる
ため、それらのIPで個人情報を調べた名簿を企業に売買しすることにより、
裏側では巨大な収益をあげております。DHCの裁判でいきなり5億円もの損害賠償
を請求されているのも、彼らの独自の調査によって2ちゃんが裏側で稼いでいる
情報がばれているからにほかなりません。2ちゃんねるでも、ほんの一部の幹部
しかしらない情報としましては、「薬・違法掲示板」の名簿を、覚醒剤の売買
組織に、売り捌いていることです。これに関しては、アングラマネーなので当然
税金もかからず、実は一番の巨大な利益は「薬・違法掲示板」で集まった
シャブ中連中の個人情報を組織に転売することにより得ています。
最近それらの情報に警察や公安が気づき始めたため、西村博之の実家には何度も
ガサ入れ(家宅捜査)に入られており、逮捕への証拠固めとして、国家権力が
動き始めて、かなり立場的には危険になったことは確かです。ですので、
以前ほど堂々と、そのような行為もできなくなってきているので、私も住居を
転々としている次第です。あっ、このことについては、本当に危ない話
なので、他言しないでくださいね。もしばれた場合は、ネタ情報として
逆にでたらめな似通った情報をたくさんネット上に流すことにより、煙に
まいてください。大抵の場合、ガセの情報をたくさん流せば、またネタが
始まったと、冗談で終わります。以前オウム真理教が毒ガスサリンを
自分たちが作っているのに、毒ガスで命を狙われたなどと自作自演した
作戦と同じ手口ですね。よろしくお願いします。
0148nobodyさん04/06/05 15:21ID:???
>>146
できます
014914604/06/05 15:39ID:???
>>148
良かったらやり方を教えていただけませんでしょうか。
0150nobodyさん04/06/05 15:52ID:???
そんな質問をしているぐらいなら教えてもわからんだろ。
何をしたいか詳しく書け。
015114604/06/05 16:11ID:???
パスワードを使ってログインしてファイルを編集する
というCGIなのですが、編集時にもう一回パスワード照合したいんです。
もう一回パスワード入力するのも面倒なのでログイン時に入力したパスワードを
編集用のCGIに渡したいんですが、どうすれば良いでしょうか。
分かりにくくてすみません。
0152nobodyさん04/06/05 16:19ID:???
>>151
それならフツーは hidden で渡すんじゃないの?
別にCookieを食わせてもよいけどさ。
0153nobodyさん04/06/05 16:25ID:???
>>151
フォームを使わずにっていうから何かと思ったらそんなことかよ・・・
そんな単にページ変移毎にパスワードを必要とするありふれた仕組みぐらい
工夫して書けよ。
ほとんどどんなスクリプトでもやってることだろ。
そんなことならスレ違いだし他のスクリプトでも見て勉強してちょうだい。
0154nobodyさん04/06/05 20:33ID:jT/a/NFi
すみません質問です。

Perlにてファイル内の特定文字を検索するにはどういうコードを書けばいいでしょうか?
ファイルの中身を全部配列に入れてjoinして強引に検索出来そうな気もしますが
もっとスマートな方法あったら教えてもらえますでしょうか?
0155nobodyさん04/06/05 21:35ID:???
>>154
ここはコーディングスレなんだからまずは自分で書いてみろ。
0156nobodyさん04/06/05 23:00ID:???
>>154
whileで一行ずつ読み込んではパターンマッチかけるとか

つか、どういうのを「スマート」と想像してるかの方に興味がある
0157nobodyさん04/06/06 00:41ID:timkGFaS
>>144
有り難うございます。
そういう方法しかないのですね。それでやってみます。
0158nobodyさん04/06/06 17:31ID:RQ9IWgny
Perl5.6.1で変数がスカラーかどうかを判断するにはどうすればいいですか?
0159nobodyさん04/06/06 17:34ID:???
>>158
$名前ってのがそうです。

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

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
016015804/06/06 17:49ID:RQ9IWgny
説明不足ですみません。
変数に代入されている値がスカラーかハッシュへのリファレンスかで
処理する内容を変えたいのですが,プログラム内部でそれを判断する
方法はないでしょうか?
0161nobodyさん04/06/06 17:49ID:???
下記のようなごく初歩のプログラムがあるんですけど
$noって=$filenameですよね?
なぜ$filenameを$noで再度置き換える必要があるのでしょうか?
後、print "$no";で一度記述してるのに
後にif文で再度同じ事をしてるのはなぜですか?


#! /usr/local/bin/perl

# ログファイル名
$filename = "count.txt";

# ファイルを開く
if (!open(FP,"$filename")) { # 失敗
$no = 0;
} else { # 成功
$no = <FP>;
close(FP);
}


# 1つ増やす
$no++;

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}
0162nobodyさん04/06/06 18:01ID:???
>>161
> $noって=$filenameですよね?
既にこの時点で(略
0163nobodyさん04/06/06 18:42ID:???
>>160
ref <変数> でリファレンスかそうでないかがわかるよ。
リファレンスじゃないなら偽。
リファレンスなら、種類によってARRAYとかHASHとかが返される。
0164nobodyさん04/06/06 18:56ID:kS2UjgnM
フォームのテキストボックスに「にほんご」と入力し送信したところ、
「\x{0082}ノ\x{0082}ル\x{0082}\x{00f1}\x{0082}イ」
と、表示されてしまいました。

「use encoding 'shift_jis';」を指定しており、
もし「use encoding 'shift_jis';」の一行を取り除くと、
ちゃんと「にほんご」と表示されます。

「use encoding 'shift_jis';」を指定した場合も、、
「にほんご」と表示されるようにするには、どうしたらよいでしょうか。

環境
ActivePerl 5.8.3 Build 809
Windows XP Pro SP2, IIS
016516404/06/06 18:57ID:kS2UjgnM
受信のソースです
--- ここから ---
use CGI;
use encoding 'shift_jis';

$cgi = CGI::new();
$text1 = $cgi->param('text1');

print <<EOM;
Content-type: text/html

<HTML>
<BODY>
$text1<br>
</BODY>
</HTML>
EOM
--- ここまで ---
016616004/06/06 19:09ID:???
>>163
うまくいきました。ありがとう。
XML::Simpleで取り出したデータ構造が,同じ階層でスカラだったり,
ハッシュだったりしたので困ってました。

漏れが買った本には載ってなかったけど新しい関数だからかな?

<参考>
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=CATEGORY&CATENO=21
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=DISP&FUNC=ref
016716104/06/06 20:05ID:ZCQZgjkY
この部分イフの前にプリントしてる
のに後にイフで再度書き込もうとしてるのはなぜですか?

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}
0168nobodyさん04/06/06 20:18ID:???
なぜですかと聞かれても、必要があるからじゃないですか?としか答えられないの。私。

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}

print "$no";

したらどうよ。
0169nobodyさん04/06/06 20:20ID:???
>167
後ろの方には FP が入ってるわけですが、そこんとこどうよ?
■ このスレッドは過去ログ倉庫に格納されています