Perlコーディング初心者質問スレ Part 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0429nobodyさん
2005/09/17(土) 09:10:30ID:???0430nobodyさん
2005/09/17(土) 10:05:17ID:???0433nobodyさん
2005/09/17(土) 15:15:36ID:???また、組み込み関数とやらにバグがあった場合、root 等の権限を
持たないユーザでは何も出来なくなるけど、そういう場合どうするの?
0434nobodyさん
2005/09/17(土) 15:35:59ID:9NJ0Gho0キーを抜き出したいのですが、これは無理なんでしょうか?
%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}
欲しい結果
aaa 3 ccc 2 bbb 1
0435nobodyさん
2005/09/17(土) 15:43:14ID:ceziuPlebiglobeでMIME::BASE64使うにはどうしたらいいの?
0436nobodyさん
2005/09/17(土) 16:07:42ID:Oc8EoCio無理じゃない?キーの頭に値を入れてソートするとか
0438nobodyさん
2005/09/17(土) 16:41:27ID:???それができるモジュールがあったと思う。
モジュール名は失念。
>>435
MIME::BASE64 を cpan あたりからダウンロードして biglobe の自分の
ディレクトリに置き、
use lib qw(path/to/MIME::BASE64);
でOK。
0439nobodyさん
2005/09/17(土) 16:44:02ID:???use Tie::Hash::Array;
tie my %hoge, 'Tie::Hash::Array';
%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}
0440nobodyさん
2005/09/17(土) 16:44:52ID:???> MIME::BASE64 を cpan あたりからダウンロードして biglobe の自分の
http://search.cpan.org/src/GAAS/MIME-Base64-3.05/
xs とかあるけど、どーやってコンパイルするんだろう。
0441439
2005/09/17(土) 16:45:43ID:???0444nobodyさん
2005/09/17(土) 17:04:08ID:???>>434 がどうして >>434 なような意味不明なことを考えたかだ。
@unko = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach (@hoge){
print "$_ ";
}
0445nobodyさん
2005/09/17(土) 17:08:38ID:???pure perl 版はどうでしょう?
http://search.cpan.org/~gaas/MIME-Base64-Perl-1.00/lib/MIME/Base64/Perl.pm
0447nobodyさん
2005/09/17(土) 17:14:41ID:???へー。pure perl なのあったんでつね。
>>446
がんばってコンパイラの使い方を説明してあげてくれ。w
0448439
2005/09/17(土) 17:15:38ID:???use Tie::Hash::Indexed;
tie my %hoge, 'Tie::Hash::Indexed';
%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}
# 一応できたけど、このモジュールだったけか…。
0449nobodyさん
2005/09/17(土) 17:19:12ID:???0451nobodyさん
2005/09/17(土) 17:55:00ID:9NJ0Gho0どうもありがとうございます。
用途は、、確かに配列でも代用できそうなんですけど、
キー指定して、値を引っ張るて事をしたく、
たまに、決まった順番でまとめて出力したかったからです。
0453nobodyさん
2005/09/17(土) 18:09:57ID:???PHPは配列とハッシュ(連想配列)の区別がないから、そのはず。
(じゃないと、キュー/スタックとして使えなから。)
$hoge = array('aaa' => 3, 'ccc' => 2, 'bbb' => 1);
foreach($hoge as $key => $value){
echo "$key => $value ";
}
結果
aaa => 3 ccc => 2 bbb => 1
0455nobodyさん
2005/09/17(土) 18:18:20ID:???0456nobodyさん
2005/09/17(土) 18:29:36ID:???0457nobodyさん
2005/09/17(土) 18:45:39ID:???0458nobodyさん
2005/09/17(土) 18:47:37ID:???それだったら
@hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
こうやっといてから
%hogehash = @hoge;
って2つつくれば済むような。
0461nobodyさん
2005/09/17(土) 19:00:26ID:???0462nobodyさん
2005/09/17(土) 20:19:55ID:???0463nobodyさん
2005/09/17(土) 20:25:16ID:???0464nobodyさん
2005/09/17(土) 21:02:52ID:EwuItVJ4疑似ハッシュって今ダメなんだっけ?
>>440
MIME::Base64ならローカルにコンパイルしてFTPでコピーしても動くよ。
0465nobodyさん
2005/09/17(土) 21:16:29ID:???put 先の環境がわからない場合は、手が出せないと思うのだけど。頭大丈夫?
0466nobodyさん
2005/09/18(日) 01:36:06ID:???やってるやつは1人か2人だと思うけど。
マジレスすると
>>452
そういうニーズがあって別に問題ないだろう。
>>465
もう少し知識をつけてから書き込みましょう。
0467nobodyさん
2005/09/18(日) 02:17:25ID:???> もう少し知識をつけてから書き込みましょう。
何の知識だろう?説明して欲しいなら正直に言えばいいのに。
pure perl 版でない MIME::Base64 を動かす場合、xs をコンパイルしないとけない。
biglobe で動くようにバイナリを作らないといけないので、
> put 先の環境がわからない場合は、手が出せないと思うのだけど。頭大丈夫?
0468nobodyさん
2005/09/18(日) 02:21:44ID:???> そういうニーズがあって別に問題ないだろう。
頭が大丈夫か否か確認しているだけで、問題であるとは言ってないのでは?
0470nobodyさん
2005/09/18(日) 02:40:02ID:???0471nobodyさん
2005/09/18(日) 02:40:28ID:???0472nobodyさん
2005/09/18(日) 02:42:27ID:???0473nobodyさん
2005/09/18(日) 02:44:47ID:???0474nobodyさん
2005/09/18(日) 02:49:56ID:???0475nobodyさん
2005/09/18(日) 02:53:27ID:???0476nobodyさん
2005/09/18(日) 03:02:25ID:5XfzNwGp0477nobodyさん
2005/09/18(日) 03:03:29ID:???0478nobodyさん
2005/09/18(日) 03:08:31ID:???小学生とか2回もウザいし。
0479nobodyさん
2005/09/18(日) 06:58:08ID:???擬似ハッシュは5.10.0以降無くなるから、お勧めしない。
perlrefのPseudo-hashes: Using an array as a hash、NOTE参照。
0480nobodyさん
2005/09/18(日) 15:30:34ID:tUMS1QFu…ということをレンタルサーバーでやりたいんですが、あまり大きくない画像(試した画像は174x180ぐらい)では
うまくいくものの、でかい画像(試した画像は1201x1372)になると処理が途中で止まってしまうみたいです。(アップロード処理後で出力しているはずのHTMLが出力されない)
アップロードまではうまく行ってるようなのでアップロード後の処理のみですが、作ったスクリプトは以下のような感じです。原因も対応もさっぱりです。どうすればよいでしょうか?どなたか教えてください。
$icon_width = 100; # 幅を100に縮小
$icon_height = 100; # 高さを100に縮小
open(IMG, "アップロードされたファイル");
$sourceimg = newFromJpeg GD::Image(\*IMG);
($image_size_x, $image_size_y) = $sourceimg->getBounds();
close(IMG);
$newimg = new GD::Image($icon_width, $icon_height, 1);
$newimg->copyResized($sourceimg, 0, 0, 0, 0, $icon_width, $icon_height, $image_size_x, $image_size_y);
open(FILE, ">縮小後のファイル.jpg");
print FILE $newimg->jpeg();
close(FILE);
0482nobodyさん
2005/09/18(日) 15:37:23ID:???ローカルで一度試してみ。
0483480
2005/09/18(日) 16:03:16ID:???とりあえず使ってるレンサバではシェルが使えるのでシェル上で
適当に画像を置いてやってみたら、ちゃんと縮小されました…
0485nobodyさん
2005/09/18(日) 16:21:18ID:???ローカルのテスト環境はWin2000とPerlは5.8.7です。
MySQLは無事にインストールが出来、動作も確認済みです。
Perlで呼び出す際の問題なのですが、use DBI;とすると、
Can't locate loadable object for module DBI in @INC (@INC contains: C:/usr/lib C
:/usr/site/lib .) at C:/usr/lib/DBI.pm line 254
というエラーが出てしまいます。
が、DBI.pmはあるべき場所にありますし、エラーの出る行数を見ても}
があるだけで、行き詰まっております。
0486480
2005/09/18(日) 16:22:26ID:???which cronでパスが表示されるので入ってるみたいです。
ただ、恥ずかしい話ですが私は使ったことがないので使い方を知りません。
0487nobodyさん
2005/09/18(日) 17:10:35ID:???ttp://www.coolbrain.net/cron.html
知らない事については、勉強すればいいと思う。
いろいろ試してみて理解不能だったら、また質問すると良いよ。
0492485
2005/09/18(日) 17:39:42ID:???0493nobodyさん
2005/09/18(日) 17:42:06ID:???なんで、それだけで動くと思う?
http://perldoc.jp/docs/modules/DBD-mysql-2.1026/DBD/mysql/INSTALL.pod
0494485
2005/09/18(日) 17:57:30ID:???Perlモジュールスレがあったみたいなので、そちらで勉強してきます。
0495nobodyさん
2005/09/19(月) 19:07:11ID:beipsuRn共通の設定定義ファイルを読み込み、それがシステムで使いまわされる感じを
考えています。
*パス構成*
cgi-bin/
| settings.pl … (x)変数に設定を代入している、定義ファイル
-log
| |counter.cgi … (a)アクセスカウンター ( settings.pl で設定した変数が生きている )
|
-bbs
.|index.cgi … (b)掲示板トップ ( settings.pl で設定した変数が消えている )
(a)にて、require '../settings.pl' を行うと、(x)で宣言した変数は生きているのですが
(b)にて、require '../settings.pl' を行っても、(x)の宣言が反映されません。
どなたか、お知恵をお貸しいただければ幸いです。
0497nobodyさん
2005/09/19(月) 21:36:55ID:???問題が発生する最も短いソースを作ってみることが大切だね。
そうすると、質問しなくても自分で解る場合も多い。
一番ありそうなのは、変数のスコープが違っているということだろうけど。
0498nobodyさん
2005/09/19(月) 21:45:40ID:uGVzhqRv0499nobodyさん
2005/09/19(月) 21:49:45ID:???全然試してないけど
my $file = 'hoge.txt';
my $line = 12;
open(FH, $file) || die "$file : $!\n";
while (<FH>) {
next if ($. < $line || $line < $.); # skip
print $_; # 目的の行
}
close(FH);
0500495
2005/09/19(月) 21:55:20ID:???レスありがとうございます。
二重require(use) して、干渉しているようです。??(?Д?)
cgi-bin/
| settings.pl … (x)変数に設定を代入している、定義ファイル
-log
| |counter.cgi … (a)アクセスカウンター
|
-bbs
.|index.cgi … (b)掲示板トップ
.|BBSthread.pm … (c)スレッド制御モジュール
(b)の index.cgi では、 use BBSthread.pm を宣言していて、
さらに (c) の BBSthread.pm で require '../settings.pl' 宣言していました。
試験的に use BBSthread をコメント化したところ、
settings.pl で設定した値が取得できました。
counter.cgi ではこのような二重require を行っていません。
これが原因っぽいです。
今回は、二重require されないようコーディングすることによって回避します。
ありがとうございました。
0501nobodyさん
2005/09/19(月) 22:03:07ID:???質問の上手い下手だけでその人の素質が分かりそうな気がする。
0502nobodyさん
2005/09/20(火) 00:12:02ID:???同じファイルに対してrequire を二重に実行すると、2回目は読み込まれない。
BBSthread.pm とcounter.cgi とで変数のスコープが違っているなら、
先にrequire した方にのみ、settings.plの内容が反映されることになる。
手っ取り早く解決するなら、require を eval に変更すればいいのだが、
このような使い方は感心しないね。
settings.pl の内容を、システムに共通な定数のリストを返す「関数」
にして、各モジュールはこの関数を呼び出すのが常道だと思われるが。
0503nobodyさん
2005/09/20(火) 02:27:35ID:jMPX6Q/fSQLで取得したデータをHTMLでテーブルにして表示しているのですが、
よくフリーメールであるような各行にチェックボックスがあって、
それにチェックを入れたデータだけCSVに書き出すといったものを作りたいのですが、
ロジック的にはどういったものになるのでしょうか??チェックボックスでCGIに渡せるパラメータは
○○=on とかってなりますよね。どうやって、データを識別したらよいでしょうか???
0505nobodyさん
2005/09/20(火) 03:50:56ID:???決してバカにするつもりで聞くわけじゃないけど、今までにCGIのプログラムを
書いて、ブラウザからフォームのデータを受け取ってみたことある?
いや、もしかして、そのレベルでつまづいているんじゃないかと思ったんで。
0506nobodyさん
2005/09/20(火) 04:20:05ID:???そういうひねくれた質問の仕方すると何かいいことある?
いや、もしかして、初心者いじって喜んでるんじゃないかと思ったんで。
0507nobodyさん
2005/09/20(火) 06:54:46ID:???0508nobodyさん
2005/09/20(火) 07:07:20ID:???0509nobodyさん
2005/09/20(火) 07:19:44ID:???<input> には name と value に任意の文字列が指定できる。
チェックボックスの場合、チェックがオンになっているときだけ
name=value という形式の文字列が送られてくる。
従って name が同じでも value が違えば識別できる。
順序は保証されないので、順序に依存してはいけない。
0510nobodyさん
2005/09/20(火) 08:49:48ID:???試してみてから質問してもらえるか。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
0511505
2005/09/20(火) 11:54:43ID:???503の質問って、別の板にもあった。そこでWebProgに行けって言われたから
ここに来たのだろうと思うんだが、質問内容に何も改善がなく、コピペしている
だけなんで、あいかわらず質問者の意図もレベルも分からなかいから、
どこまで分かってる? と、確認しているだけなんだが・・・
何を試したかとか、どこまで分かっているか、とか、情報が一切ないのは困る。
0512nobodyさん
2005/09/20(火) 18:16:45ID:???CGI.pmを使ってフォームの値を受け取ろうとしてます。
-----
<form action="hoge.cgi?getval=ggg" method="post">
<input type="hidden" name="postval" value="ppp">
<input type="submit">
</form>
-----
こんな感じのフォームの値を受け取ろうとしているんですが、
GETの引数がCGI.pmに渡されません(この場合getvalが渡されない)
これは仕様でしょうか?何か方法があったりしますか?
0513nobodyさん
2005/09/20(火) 18:27:59ID:???0514nobodyさん
2005/09/20(火) 18:28:07ID:???> <form action="hoge.cgi?getval=ggg" method="post">
自分で method="post" て書いてるじゃないですか…。GET引数は渡りません。
hiddenで渡してください。
0515512
2005/09/20(火) 18:42:00ID:???>514
故意にPOSTを指定してるんです。
actionに「acton=hoge.cgi?getval=ggg」としてるんで、GETの値も渡るかなと思ったんですが、
ダメなんですかね?
そういうものなんでしょうか?
0516nobodyさん
2005/09/20(火) 18:53:02ID:???それでは、なぜGETとPOSTがあるのかを説明してください。
また、メソッドになぜ両方指定するものがないのかも考えてください。
0517nobodyさん
2005/09/20(火) 18:53:22ID:???(undef, $getval) = split /=/, $ENV{QUERY_STRING};
でOK。
0519nobodyさん
2005/09/20(火) 19:06:19ID:???0520512
2005/09/20(火) 19:12:18ID:???えっと、分かりません(汗
なんでなんでしょう?
私の中では、ブックマーク可能なページはGETにしとく、、くらいの認識しかないです。
あと、URL直接叩かれるとまずいページはPOST、、とか。そんな認識でごめんなさい。
>517
CGI.pmに頼らず、自分でパースしなくてはならない、ということですね。
これならできそうです。
で、
POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
php書くときは結構普通にやってたけど、これって考えを改めたほうが良いですか?
0521nobodyさん
2005/09/20(火) 19:15:09ID:???> POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
お行儀は良くない程度と思っておけばいいんじゃない?
CGI.pmはmethodを見るから受け取れなかっただけ
0522nobodyさん
2005/09/20(火) 19:22:09ID:???> POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
問題ないと思うよ。
おれもよく使ってる。
0523nobodyさん
2005/09/20(火) 21:01:01ID:???もしも下記に間違い等ございましたらご教示いただきたい
次第です。
宜しくお願いいたします。
sub remove_emoji{
my $str = $_[0];
# i-mode, EZweb
my $sjis = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
my $emoji = '[\xF8\xF9][\x40-\x7E\x80-\xFC]';
$str =~ s/\G((?:$sjis)*)(?:$emoji)/$1/go;
# vodafone
$str =~ s/\x1B\$[\x21-\x7A]+\x0F//g;
return $str;
}
0526nobodyさん
2005/09/20(火) 22:23:57ID:???不愉快な思いをさせてしまい、本当に申し訳ありませんでした。
今のところ不具合はないのですが、もしもアドバイス等いただ
ければと思い書かせていただいた次第です。
悪気はありませんのでお許しください。
すみませんでした。
0527nobodyさん
2005/09/20(火) 22:29:15ID:???CGIモジュールではPOSTメソッドのときにurlのquery stringで渡した
パラメタはurl_paramっていう別のインタフェースでとるようになって
いるのよ。詳しくはCGIモジュールのマニュアル嫁。特にMIXING POST
AND URL PARAMETERSという見出しのところ。
0528512
2005/09/21(水) 00:16:24ID:???なるほど、安心しました。
>527
ごめんなさい。おもいっきり書いてましたね。
どうもありがとうございます。ものすごく助かりました。
精進します。
0529nobodyさん
2005/09/21(水) 02:03:43ID:???■ このスレッドは過去ログ倉庫に格納されています