Perlコーディング初心者質問スレ Part 58
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/06(水) 22:54:32ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0233nobodyさん
2008/09/26(金) 10:00:49ID:???0234nobodyさん
2008/09/26(金) 10:12:12ID:???0235nobodyさん
2008/09/26(金) 11:15:27ID:???いくつかのファイルのうちどれかでロックが取得できればいい場合に
LOCK_NBつけて、場合によってはループまわすことはあるが
普通に使ってる分にはそんな事する必要もない
0236nobodyさん
2008/09/26(金) 11:25:11ID:???0237nobodyさん
2008/09/26(金) 11:27:33ID:???0238nobodyさん
2008/09/26(金) 12:15:18ID:???了解しました。
0239nobodyさん
2008/09/26(金) 13:37:22ID:???0240nobodyさん
2008/09/29(月) 01:27:41ID:???規模が大きくなるにつれてファイルを分割したのですが、
モジュールが呼び出し元のパッケージの変数を要求することが多く、
一々変数の前にパッケージ名をつけなければならないのが非常に面倒です。
mainパッケージの変数を簡単に呼べるようにno strictしたりもしましたが、
こうするとコードを書く効率が悪くなります。
何か解決法は無いでしょうか?モジュールの分割の方法が下手なんでしょうか。
0241nobodyさん
2008/09/29(月) 01:39:41ID:???0242nobodyさん
2008/09/29(月) 01:53:46ID:???わざわざ名前空間を明示しない意味がわからない
例えば新宿駅で、京王線のホームで駅員を呼んだら京王線の職員が駆けつけてくれたのに
「JRの職員が来ないのはなぜだ!!(#゚Д゚)」と言ってごねている人を君はどう思うか・・・
八王子市内から市外局番なしで電話をかけておいて、「03局に繋がらない!!(#゚Д゚)」と言って
NTTにクレームを付ける人をどう思うか・・・
0243nobodyさん
2008/09/29(月) 04:50:42ID:???以下のようなプログラムをtest.plとして保存し、プロンプトから
>perl test.pl hoge hugaと実行すると引数が想定どおりに表示されていきますが
>test.pl hoge hugaとすると何も表示されません。
拡張子.plはperl.exeと関連付けられているので実行はされるんですが、引数がうまくわたっていないようです。
後者の場合でも引数が表示されるようにするにはどうすれば良いでしょうか教えてください。
$i = 0;
foreach (@ARGV) {
print "$i:$_\n";
$i++;
}
環境:WindowsXPとActivePerl v5.8.8
0244nobodyさん
2008/09/29(月) 09:02:48ID:???廃棄するしかないですね
0245nobodyさん
2008/09/29(月) 10:17:10ID:???関連付けが間違ってるか、Windowsが壊れたかのどっちか。
うちのWindowsは、たまに関連付けが壊れるので困る。
C:\Perl\bin\perl.exe "%1" %*
0246nobodyさん
2008/09/29(月) 14:38:34ID:???それで画像のリサイズはImage::Magickで何とかなったんですが、作成後の容量がかなり大きくなります。
元の画像が100KBに対して、サムネ画像は30KBくらい。
quality値を下げても、画像が劣化するだけで容量がほとんど変わりません。
解像度はこれ以上落とせないとして、何か容量減らす方法って何か無いでしょうか?
理想は10KB以下で、画像の劣化は多少は諦めます。
どなたか分かる方がいればお願い致します。
0247nobodyさん
2008/09/29(月) 15:59:15ID:???どういうコード書いてるかエスパーじゃないからわからないけど小さくするのにresize関数
使ってるとか?
0248nobodyさん
2008/09/29(月) 17:18:36ID:???resizeで画像を小さくした後、Setで画質を下げてます。
以下ソース。
$gazouはアップされた640×480の画像です。
use Image::Magick;
$image = Image::Magick->new;
$image->Read("$gazou");
$image->Resize(width => 160,height => 120);
$image->Set(quality=>50);
$image->Write("$gazou2");
0249247
2008/09/29(月) 18:00:47ID:???$image->Sample(width=>160, height=>120);
thumbnailって関数あったと思ってたけどぐぐっても見つからなかった
ScaleかSampleだったかな
とにかく画像の容量は境目が鮮明なほど大容量になるから普通はぼかし入れてサイズ変更
することで容量がコンパクトに収まる。確かResize関数はそれをやってなかったから脹れる
0250nobodyさん
2008/09/29(月) 18:08:53ID:???return $rc if $rc = $image->Read( $_[0] );
my($width,$height) = $image->Get( 'width' , 'height' );
return $rc if $rc = $image->Thumbnail( width => $WIDTH , height => $height * ( $WIDTH / $width) );
return $rc if $rc = $image->Write( $_[1] );
0251nobodyさん
2008/09/29(月) 18:29:54ID:???JPEG使えばquality=>50で大体10k切れると思う。
0252246
2008/09/29(月) 20:17:47ID:???>>250を参考に、>>248のソースの中のこの行を、
$image->Resize(width => 160,height => 120);
$image->Thumbnail(width => 160,height => 120);
こう変えてみたのですが、エラーも何も出ずに処理が中断されました。
ちなみにResizeをScaleとSampleに変えた場合は、いちおう画像は作成されましたがResizeと同じような容量でした。
ひょっとしてサーバーが対応してないのかな…
0253251
2008/09/29(月) 20:25:35ID:???せいぜい頑張りたまえ。
0256251
2008/09/29(月) 22:15:24ID:???Image::Magick使ってから発言してるか?
160*120ドットにResizeして、JPEG,Quality50でWriteするだけで、10KB以下になるぞ。
0257251
2008/09/29(月) 22:20:16ID:???GIFで圧縮したとしても、15KB程度ぐらいには圧縮可能だろうさ。
0258nobodyさん
2008/09/29(月) 22:24:21ID:???今回の場合とは違うかもしれないが、自分も似たような症状でハマったことがある。
原因は、画像に含まれるコメントなどの付加情報だった。
Thumbnailなら消えるのかな?
0259251
2008/09/29(月) 22:30:58ID:???0261246
2008/09/29(月) 22:56:00ID:???結果から言うと無事に減量に成功しました。
>>258さんの言う通り余計な情報が入ってたからみたいで、
$image->Profile();
このコマンドを使って付加情報を消してみまたところ、元が200KBの画像もQuality75で4KBほどに落ちました。
>>251さんの言うStripも試してみましたが、サーバーが対応してないのかしてエラーが…
何かあまりよく無い方法かもしれないけど、とりあえず減らせたのでこれでいってみようと思います。
本当はThumbnailが使えたら一番良かったんだろうけど…
皆様、どうもありがとうございました。
0262258
2008/09/29(月) 23:41:26ID:???お。そりゃえがった
0263nobodyさん
2008/09/30(火) 11:08:00ID:???くっついてるライブラリの問題?
0264246
2008/09/30(火) 14:15:08ID:???ロリポップですorz
多分かなりバージョンが古いと思います。
ローカルのサーバーだとImage::Magickの最新版入れたからどっちのコマンドも使えるんだけど…
逆にProfileがエラーで使えず。
このどっちつかずの状態が非常に面倒だw
0265nobodyさん
2008/09/30(火) 16:09:35ID:???0266nobodyさん
2008/09/30(火) 16:40:02ID:???0267nobodyさん
2008/09/30(火) 18:15:01ID:WMNZymKE0268nobodyさん
2008/09/30(火) 18:50:21ID:???Win32API も呼べる
http://www.google.co.jp/search?num=100&hl=ja&safe=active&client=firefox&rls=org.mozilla%3Aja%3Aofficial&hs=6gw&q=perl+Windows+GUI&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
0269244
2008/10/01(水) 05:05:58ID:???assoc .pl=Perl
ftype Perl=C:\Perl\local\bin\perl.exe "%1" %*
と何度かしているうちに直った
ありがとう
0270nobodyさん
2008/10/03(金) 14:04:41ID:???もしくはモジュールはありますでしょうか?
0271nobodyさん
2008/10/03(金) 14:23:53ID:???0273nobodyさん
2008/10/04(土) 18:08:22ID:???他のサーバにもそのままコピーしたいのですが
何か良い方法ありませんか?
同じ環境を作りたいんです
お願いします
0274nobodyさん
2008/10/04(土) 18:12:10ID:???>他のサーバにもそのままコピー
それをやればいいと思うよ
0275nobodyさん
2008/10/04(土) 18:14:56ID:???な、なんだってー知らなかったー
0276nobodyさん
2008/10/04(土) 18:18:35ID:???0277nobodyさん
2008/10/04(土) 18:50:33ID:???0278nobodyさん
2008/10/04(土) 19:57:19ID:???0279nobodyさん
2008/10/05(日) 04:46:08ID:???なんつーか、自分のレベルの低さにげんなりすることってない?
あのレベルにいくまでどのくらいかかるのやら。
0281nobodyさん
2008/10/05(日) 09:32:19ID:???自分のペースでええやん。
俺なんかああいう人たちが苦労して切り開いた道を、すこーし後ろから付いていくだけだから。
まぁ追い抜きたいなら止めないけど。
0282nobodyさん
2008/10/05(日) 13:41:01ID:???CGI:Minimalの
違いについてカンタンに説明してください。
ちなみにグーグルで検索しても
説明ページは出てきませんでした。
0284nobodyさん
2008/10/05(日) 16:35:07ID:???お気に入りに入れておくといいよ。
http://search.cpan.org/
0286nobodyさん
2008/10/05(日) 21:52:46ID:???モジュールたくさんあって、みなさんこれ全部把握してるんですか?
有名なところだけしか使わないんですか?
初心者ですみません
0287nobodyさん
2008/10/05(日) 22:08:05ID:???それっぽいキーワードで検索して引っかかったもの使ったり
必要なところだけ切り出して使ったりしてるだけ
まぁ車輪の再発明と言われようが作ってみるのも悪くない。
0288nobodyさん
2008/10/05(日) 22:09:47ID:???日本語でも「cpan 機能名」でググればけっこー見つかるけど。
0289nobodyさん
2008/10/05(日) 22:11:33ID:???安心しましたw
有名どころと使えそうなのが検索で出たら使う
って感じですかね
0290nobodyさん
2008/10/05(日) 22:12:48ID:???これ良いですね試してみます
0291nobodyさん
2008/10/06(月) 04:55:13ID:???CPANの一覧表に一通り読んで、「おお、こんなものがあるのかそんなものもある
のか」とおどろきつつ大まかなところを掌握しておく。
……というのをやったのはもう数年前だな。
もう増え過ぎて困難になってるかな。
0292nobodyさん
2008/10/06(月) 08:23:17ID:mCk9rMM20293nobodyさん
2008/10/06(月) 08:59:44ID:???巨大な敵は陰に隠れるというが・・・
0294nobodyさん
2008/10/06(月) 16:08:49ID:4zLyyJ4I書き込みの条件を満たしているかチェックする関数、ログに書き込む関数、
と分けて
#!usr/local/bin/perl
&decode;
✓
&writelog;
のようにしているのですがcheckからある変数を
受け取って他の関数内で使いたいとき皆さんはどうしてますか?
グローバル変数でやろうとするとどうしてもグローバル変数がかなりの数に
なってしまいますし、だからと言って($abc,$efg)=&xyz;
のようにしてしまうと無駄な変数が増えてしまうしlocalでやるのも
結局、グローバル変数使ってるのとあまり変わらないような気がします・・・
上記のように&decode;✓…のようなやり方自体がよくないでしょうか?
馬鹿みたいな質問ですみません。答えていただけるとありがたいです。
0295nobodyさん
2008/10/06(月) 16:29:40ID:???use MYLIB;
my $obj= MYLIB->new;
$obj->decode;
$obj->check;
$obj->writelog;
0296nobodyさん
2008/10/06(月) 17:11:10ID:???やり方は色々だけど。
hash(のref)渡しもあるね。
use Data::Dumper ;
my %hash = ( hoge => 1 , foo => 1 ) ;
sub hoge{ shift->{hoge} = q{hoge} ; }
sub foo { $_[0]->{foo} = q{foo} ; $_[0]->{piyo} = q{new} ; }
sub bar{ my $ref = shift ; $ref->{bar} = q{new} ; }
hoge \%hash ;
foo \%hash ;
bar \%hash ;
print Dumper \%hash ;
0297nobodyさん
2008/10/06(月) 17:49:55ID:???0298nobodyさん
2008/10/06(月) 18:21:26ID:???0299nobodyさん
2008/10/06(月) 18:23:54ID:mCk9rMM2掲示板くらい。
0300nobodyさん
2008/10/06(月) 18:32:07ID:???my %query = &decode;
my $error1 = &check(%query);
my $error2 = &writelog(%query);
まぁグローバル変数もわかってないんだろうけど。。。
0301sage
2008/10/06(月) 20:36:18ID:5bsf/GRb*.txtの内容
<A href="../$page.html>リンク</A>
↓呼び出す
*.cgiの内容
$page = a;
$data[0]
txtの内容はちゃんと反映されてるのだが、
*.txtの中の$pageはそのまんま反映されてしまう。
(http://***/$page.htmlのまま)
どうしたもんか?
0302nobodyさん
2008/10/06(月) 20:41:43ID:???もうちょっと推敲してから質問してくれ
0303nobodyさん
2008/10/07(火) 01:05:04ID:???別所ですが、ちょうど同じような質問が出されていたみたいですよ。
ttp://pc11.2ch.net/test/read.cgi/php/1218030872/301
0304nobodyさん
2008/10/07(火) 01:05:59ID:???0305nobodyさん
2008/10/07(火) 01:07:19ID:???0306nobodyさん
2008/10/07(火) 01:48:33ID:YSCh74Wr正直皆さんの回答を見ても知識不足のためよくわかりませんでした・・・
>>299さんの言うとおり重さや綺麗汚い気にせずとりあえずグローバル使い
まくりで仕上げてみようと思います。答えてくださった皆さんありがとうございました。
0307nobodyさん
2008/10/07(火) 11:22:00ID:???進研模試でいうとfjがおよそ偏差値45、民放地上波は約40、
ニュース速報+は35程度を対象にしています。
0308nobodyさん
2008/10/07(火) 12:38:56ID:???0309nobodyさん
2008/10/07(火) 23:22:26ID:???「データのリファレンスを受取って(デコード|チェック)済データのリファレンスを返す」ように各サブルーチンを書いておいて:
&writelog(&check(&decode));
0310nobodyさん
2008/10/07(火) 23:46:05ID:???一回で済ませ
0311nobodyさん
2008/10/08(水) 00:07:51ID:???悪いこといわんから変数受け渡しで書いてみろ。
ハッシュ(参照)で受け取って、ハッシュ(参照)で渡せば、なんてことはない。
特に永続化環境(mod_perl等)ならグローバルを使うという発想はないと思ったほうがいい。
0312nobodyさん
2008/10/08(水) 00:50:42ID:???$hoge = 'http://excite.co.jp/?hoge=hoge&huga=huga';
$hoge = 'http://goo.ne.jp/?hoge=hoge&huga=huga';
などの、ドメイン部分が不定な文字列を、すべて
$hoge = 'http://example.com/?hoge=hoge&huga=huga';
のように置換したいのですが、どんな置換をすればいいでしょうか?
0314nobodyさん
2008/10/08(水) 01:07:59ID:???ヒント:置換演算子
s{http://[^/]+}{http://example.com};
0316nobodyさん
2008/10/08(水) 02:25:08ID:Ayb4NO8c0318nobodyさん
2008/10/08(水) 04:22:18ID:???0319nobodyさん
2008/10/08(水) 05:46:48ID:???ttp://oshiete1.goo.ne.jp/qa3380695.html
このサイトで質問してる人と同じ質問ですが、
クッキーは使わず、複数のドラッグできる画像の移動したデータを他の人も移動後の状態で閲覧できるようにしたいです。
掲示板のスクリプトを利用して全部保存すれば、元からロックも付いてて便利だと思ったのですが、
座標を渡すことが出来ないので困ってます。
現在HTMLにジャバスクリプトで簡単な形を作って試しているのですが、
どうにも、保存のところで何もアイデアが浮かばない。
一週間、暇な時間に検索して回ったのですが、
解決策には出会えませんでした。
ジャバスクリプトで移動できる画像ファイル(img1~img6等)とコメント部を各画像毎に対応させた名前のボタンをクリックすることで
コメントと画像ファイルを保存できるようにしたい。
何か知恵を貸してください。
0320nobodyさん
2008/10/08(水) 05:57:55ID:vsHGNNNAスクリプトが大きくなれば大きくなるほどスクリプト自体見づらくなるだろうし、
他人からすると見づらいかもしれませんが、無駄に変数作って無駄にメモリへの書き込み
増やすぐらいならグローバル変数使うほうがいいと思ってました。
変数の中身が同じ内容なら新しく書き込まず同じメモリを参照するということはないですよね?
皆さんが教えてくれた方法をいくつか試してやってみようと思います。
質問に答えてくださった方々ありがとうございました。
0321nobodyさん
2008/10/08(水) 06:58:31ID:???>>296のように、リファレンスで渡せばコピーは発生しないよ。
直接中身を弄れるから、returnで返す事も要らない。
0322nobodyさん
2008/10/08(水) 10:04:27ID:???この考え方のが無駄
0323nobodyさん
2008/10/08(水) 10:25:26ID:???どんなんだろうとは思う。
0324nobodyさん
2008/10/08(水) 10:40:29ID:???0325nobodyさん
2008/10/08(水) 16:11:59ID:KrA4Ywcmそうなんですか。自分はパッケージ?(Data::Dumper)というのは触ったことないので
これを機会に触ってみようと思います。
>>322 >333
仮に完成しても人が来るかもわかりませんが仮に来てくれて書き込みがあった場合
1回の書き込みでテキストから100行ほどの文を3つの配列によみこんでまた書き込みしなければ
いけないので変数受け渡しでやるとすごい負荷になるんですよね。
しっかりした知識があれば1つの配列で収まるかもしれないし
それ以前に配列だけグローバル変数にすれば済む話ですが。
とりあえずできる限りローカル変数にしてみようと思います。
0326296
2008/10/08(水) 17:23:24ID:???掲示板の機能とかには関係ありません。
>>296を全部コピペして、「コマンドラインから実行」してみてください。
%hash の内容が書き換っている事が分ります。
0327nobodyさん
2008/10/08(水) 18:07:19ID:???変数が一部分でしか使われていないなら、その使われている辺りを調べればいいけど、
グローバル変数の場合、最悪、全てのソースコードとにらめっこすることになる。
サブルーチンのテストするにしても、グローバル変数がどこで使われてるのか
分からないから、全ての変数を設定しないといけない。
そんな理由で、グローバル変数は定数ぐらいにして、捨てたほうが楽になるよ。
同じ理由で、一つのハッシュに詰め込みすぎるのにも注意してね。
0328nobodyさん
2008/10/08(水) 18:20:31ID:???掲示板と画像ドラッグを同列に扱うという感覚がよくわからない。
あるページに複数がアクセスしてるとき、誰が画像の主導権を握るの?
リアルタイムで動かすなら、Perlではどうにもならんから、AjaxとかASP.NETスレで訊いてみれば?
0329nobodyさん
2008/10/08(水) 19:13:15ID:Ayb4NO8cいくら変数をローカルにしたところで、無駄な処理やループが大毛りゃ話になりません
0330nobodyさん
2008/10/09(木) 00:02:38ID:???書き込みボタンを押した時点で、ロックをかけようと思ってます
同時に何人かが動かし続けるような状態にはならないと思う
A 画像A
B 画像B
書き込みボタン
Aさんが画像を動かして書き込みボタンを押して変更したとき
Bさんは動かす前の画面のままで、画像を動かし書き込みボタンを押したら、Aさんは無視してBさんが動かした状態に更新されていいです
それか
A 画像A OK Clear
B 画像B OK Clear
こんな風に数行に渡ってかかれたものをOKボタンで座標と名前上書きでもいい
一人の人が一つのボタン、一つの画像と名前用テキストボックスを所有
Aが動かしたとき、Bがアクセスし動かしてても、ページはAが動かす前の状態
Aが動かし終わってAの画像座標を保存したとき、Bが見てるのはまだAが動かす前の状態
Bが動かしてOK押したとき、やっとBが見れるのはAもBも動いた後の状態
こんな風にできたらいいなと思ってます
Javaよりも、ジャバスクリプトとParlでできそうと思って・・・
ジャバスクリプト部分は完成してます
後はOKボタンでどう座標を保存するか・・
説明いまいちですか?
0331nobodyさん
2008/10/09(木) 02:03:13ID:???A,Bはそれぞれ自分専用の画像を動かすってこと?
ま、いいやw
座標をクエリ文字列にしてURLにして送信ってとこまではおk?
JSONにして送信してもいい。
基本的にJavascriptの質問な気がする。。。
■ このスレッドは過去ログ倉庫に格納されています