トップページ⇒tech
1001コメント317KB

Perlについての質問箱 32箱目

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2007/08/13(月) 18:01:53
Perlについての質問箱 32箱目
0809デフォルトの名無しさん2007/10/02(火) 04:37:54
>>808

$num{'A'} = 4

と言うようにハッシュに対応する数値を入れて、文字毎に数値を取り出して計算する
0810デフォルトの名無しさん2007/10/02(火) 07:33:39
{'A'}
0811デフォルトの名無しさん2007/10/02(火) 07:41:29
>>807
文法は一つしかないんだから、全部覚えればいいだけの話だよ。
頭固すぎ
0812デフォルトの名無しさん2007/10/02(火) 08:36:41
別に無理して人が書いたものを読む必要ないんじゃないかな。
仕事が嫌なら、地面で穴を掘っている周辺で腕をくるくる回す簡単なお仕事に
転職すればよろし。
0813デフォルトの名無しさん2007/10/02(火) 10:00:47
>>804
> こういうものは、なれるもんなんですかね?

慣れるか否かという点にもっとも大きく関係するファクターは、あなたの知的能力。
0814デフォルトの名無しさん2007/10/02(火) 12:09:28
>>807
Python やらないか?
0815デフォルトの名無しさん2007/10/02(火) 12:20:15
ウホ いい言語
0816デフォルトの名無しさん2007/10/02(火) 15:29:52
>>807
向いてないんじゃないかな・・・
0817デフォルトの名無しさん2007/10/02(火) 15:44:38
>>804
お前はなれないだろう。
0818デフォルトの名無しさん2007/10/02(火) 20:43:13
Aがキーで
4が実体?
0819デフォルトの名無しさん2007/10/02(火) 21:13:27
ヴァリューじゃね?
0820デフォルトの名無しさん2007/10/02(火) 22:22:30
正規表現 /\s*([0-9A-Za-z]+)=([\x22\x27])([^\2]*)\2\s*/
でHTMLタグの属性を取得を試みたのですがうまくいかねぇっす。
後方参照の否定マッチってどうやってやるの?
0821デフォルトの名無しさん2007/10/02(火) 23:52:12
HTMLの解析に正規表現を使うべからず。
0822デフォルトの名無しさん2007/10/02(火) 23:57:40
>>820
HTML::Parserとか使えば?
0823デフォルトの名無しさん2007/10/03(水) 00:20:23
>>821,822

質問の仕方が悪かったです。
HTMLの話は抜きで正規表現で後方参照で否定マッチする方法はありますか?

#Web::ScraperやHTML::Parser、HTML::TreeBuilderの使用の検討はしましたが
#タグにidやclassが振ってなくて構造体でのスクレイピングが行いにくいので正規表現でやってます。
0824デフォルトの名無しさん2007/10/03(水) 00:26:48
(["'])(.*?)\2

じゃあかんの?
0825デフォルトの名無しさん2007/10/03(水) 00:33:48
>>824

HTMLならそれでOKっすね。
ありがとうございます。
後方参照の否定マッチってできないもんですかね?
0826デフォルトの名無しさん2007/10/03(水) 00:39:07
否定読みを駆使すれば出来る。
0827デフォルトの名無しさん2007/10/03(水) 18:13:57
おまえウザイよ。いいかげんにしろ。
0828デフォルトの名無しさん2007/10/03(水) 21:24:25
POSTデータを数値に変換したいんですが
どうすればいいんでしょうか?

例えばフォームからSJISの「あ」という文字を取ると「82A0」
という文字列が取れるんですが
これを16進数の数値として扱って10進数に変換ってどうやればいいんでしょう?

ord関数使うのが一般的でしょうか?
0829デフォルトの名無しさん2007/10/03(水) 21:52:57
>>828
http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/
0830デフォルトの名無しさん2007/10/03(水) 21:59:01
>>829
ありがとうございます
バイナリ→10進数の変換でいけるのかな?
やってみます
0831デフォルトの名無しさん2007/10/03(水) 22:21:22
>>829
できませんでした…orz

そもそもポストで取ってるので
文字コードが文字列で入ってる状態です

「あ」で「%82%A0」です
この「%82%A0」を数値に変換したいんですが
どうすればいいんでしょ?

例えばCならintで宣言した変数にぶっこんだら勝手に数値として扱ってくれますが
perlだとどうすればいいのやら…

ためしに「%82%A0」+「%82%A0」みたいなことすると「%82%A0」は数字の1として扱われてるよう
「あ」でも「い」でも同じ数値の1
0832デフォルトの名無しさん2007/10/03(水) 22:36:44
自己解決しました

$hoge="「%82%A0";
$hoge10=~ s/%//g;
$hoge100 = hex($hoge10);


%がよけいでした、これ抜いたら普通に16進数として扱ってくれました

0833デフォルトの名無しさん2007/10/03(水) 23:07:11
^^
0834デフォルトの名無しさん2007/10/04(木) 01:07:59
またおまえか。いらん事すんな
0835デフォルトの名無しさん2007/10/04(木) 08:09:09

後方参照の否定マッチってできないもんですかね?
0836デフォルトの名無しさん2007/10/04(木) 17:21:08
Class::DBI を使って Postgres のデータを操作したいのですが、
Postgres のテーブル内に update という名のカラムがあるとまずいのでしょうか?

Column 'update' in My::Class::Hoge clashes with built-in method at 〜

カラム名を変えないとだめですか?

0837デフォルトの名無しさん2007/10/04(木) 18:11:57
スレ違い
カラム名変えてやってみろよクソが
0838デフォルトの名無しさん2007/10/05(金) 09:38:35
>>836
> Column 'update' in My::Class::Hoge clashes with built-in method at 〜
>
> カラム名を変えないとだめですか?

Class::DBI の _make_method から出てるエラーですね。
update メソッドなのか、カラム名から生成されたアクセサなのかわからなくなるので、
カラム名変えるべきなのかも。

0839デフォルトの名無しさん2007/10/05(金) 16:27:46
>カラム名を変えないとだめですか?

自分で気づいているなら、なぜ自分で試さない?
このスレの住人に試させてオイシイとこだけ持ていくつもりか?
0840デフォルトの名無しさん2007/10/05(金) 16:45:17
BMPの中に指定された色があるか判断する関数がないかなといろいろ探しているのですが見つからないので
知っていたら教えていただけないでしょうか
例えばRGBの赤(ff0000)があるかどうか判断するような関数がないものでしょうか
0841デフォルトの名無しさん2007/10/05(金) 16:51:38
GD とか ImageMagick とか Imager とか
0842デフォルトの名無しさん2007/10/05(金) 16:54:06
BMP はベタイメージだから、ヘッダを除いたデータに対して ABGR で検索してみて
見つかった場合にその値が4バイト境界にまたがっていなければ (4の倍数で割れる位置にあれば) 指定色の発見
で良いかと思います。
パレットつきならパレットに対してサーチすりゃいいだけなので、その画像がフルカラーなのかパレット付きなのか
チェックするのが最初の手順ってことですかね
0843デフォルトの名無しさん2007/10/05(金) 17:11:03
>>841 >>842
サンクス!
早速やってみようと思う
08448362007/10/05(金) 17:39:07
>>837-839
既存のプログラムに影響があるので、できれば Postgres のテーブルの変更は
避けたかったのですが、やむを得ないようですね。
ご回答ありがとうございました。
0845デフォルトの名無しさん2007/10/05(金) 18:18:09
>>837-839 の一連の回答において、>>838 のように親切丁寧な回答は評価されるべき。
0846デフォルトの名無しさん2007/10/05(金) 20:21:07
↑
自作自演かっこ悪い
0847デフォルトの名無しさん2007/10/05(金) 20:30:04
って書く奴もかこ悪い
0848デフォルトの名無しさん2007/10/05(金) 20:36:25
ということにしたいのですね。
0849デフォルトの名無しさん2007/10/05(金) 21:26:12
自分自身を誉め称える
0850デフォルトの名無しさん2007/10/05(金) 21:34:50
それがここだ
0851デフォルトの名無しさん2007/10/05(金) 22:58:37
>>844
http://search.cpan.org/~tmtm/Class-DBI-v3.0.17/lib/Class/DBI.pm#Changing_Your_Column_Accessor_Method_Names
0852デフォルトの名無しさん2007/10/05(金) 23:03:49
Jcodeに空白文字列のリファレンス渡したら
変な文字列が詰め込まれて帰ってくるんだけど
うちだけ?じかに値渡すとなんとも無いのだが。
0853デフォルトの名無しさん2007/10/05(金) 23:10:20
それさ初期化して無いやつのリファレンス渡してない?
my $str = '';
ってやってるのと
my $str;
は中身違うよ
0854デフォルトの名無しさん2007/10/05(金) 23:39:58
>>853
もしかしたら途中でundef帰ってたかもしれない
ありがとう
0855デフォルトの名無しさん2007/10/06(土) 00:03:18
Perlプログラムでこういう記述があるわけだが間違っているのか?

$bankgold += 1000; &bankwrt;
(※ここでは$bankgoldに50000が代入されているとする)

$bankgoldという変数に1000を+し、&bankwrtを実行するというものなんだが。
しかし、これだと何故だか+した数値(1000)になってしまう。
俺の理想では$bankgold(50000)に+1000しているから51000になってほしいのだが、
なぜ、+した数値になるのかがわからん。

因みに&bankwrtの中身は

open(BANK,">********");
flock(BANK,2);
print BANK "$bankgold";
close(BANK);
}

このサブルーチンを実行すれば最新(その都度、代入された)$bankgoldが
*******ファイルに保存される。
(************は例で実際にはこうは書いていないです)
0856デフォルトの名無しさん2007/10/06(土) 00:11:13
>>855
デバッグしろよ。
0857デフォルトの名無しさん2007/10/06(土) 00:20:18
値を渡してないのに51000になるわけがないw
0858デフォルトの名無しさん2007/10/06(土) 00:26:24
>>855
gold じゃなくて silver に変えればいけると思います





   …って書くと本当にやりそうだなこの人
0859デフォルトの名無しさん2007/10/06(土) 07:51:53
日本語でおk
0860デフォルトの名無しさん2007/10/06(土) 08:46:02
gold を silver に変えるとこれまでのアトピーがうそのように治り、
今では毎晩女の子とエッチな夜を過ごしています。
08618442007/10/06(土) 10:00:46
>>851
ありがとうございます。
0862デフォルトの名無しさん2007/10/06(土) 10:34:39
>>855
こんなのカンタン。1行目に

$bankgold = 50000;

って書いてごらんよ。

>(※ここでは$bankgoldに50000が代入されているとする)
どこにも代入してないじゃん。
0863デフォルトの名無しさん2007/10/06(土) 12:39:48
>>858
ほっほんとうですか!?
親切にありがとうございます!!!









これでいいか?
>>862
ここでは代入してないけど、別ファイルで代入してるから、
一応、50000になっていると考えてくれ。
0864デフォルトの名無しさん2007/10/06(土) 12:59:46
それが代入されてないんだろ
0865デフォルトの名無しさん2007/10/06(土) 13:51:05
取りあえず&bankwrt;を消してどうなるか書き込んでくれ。
0866デフォルトの名無しさん2007/10/06(土) 13:52:13
あー、すまん。$bankgold += 1000;だった。
0867デフォルトの名無しさん2007/10/06(土) 13:53:21
プロクラムは、プログラマの意図したとおりに動くのではなく、書いたとおりに動いているだけである。

原因は、
$bankgoldに50000を代入していない
+=1000する前か、した後でbankwrt()を呼び出す前に値を書き換えてしまっている
bankwrt()内のopenに失敗している
のいずれかでしょ。

グローバル変数を使って、あちこちで扱うと、途中で何しているか自分でも分からなくなるので、
値渡しのサブルーチンを作ると吉。

use strict;
my $bankgold = 50000;
$bankgold += 1000;
bankwrt($bankgold);

sub bankwrt {
my $bankgold = shift; ### 受け取った引数を…
open(BANK,">********") or die $!; ### 必ずエラートラップすべし
flock(BANK,2);
print BANK $bankgold; ### …ただ書き込むだけ!
close(BANK);
}
0868デフォルトの名無しさん2007/10/06(土) 13:54:43
やさしい奴だな、
だがuse warningsもほしい。
0869デフォルトの名無しさん2007/10/06(土) 14:06:56
だから、デバッグしろよ。
0870デフォルトの名無しさん2007/10/06(土) 19:42:28
Crypt::RC6を使おうと思ってるんだが
16bitの秘密鍵はどうやって作ればいいんだ?

だいたい、bitがどのくらいなのかもよく分からん俺なんだけど。
0871デフォルトの名無しさん2007/10/06(土) 19:47:40
16byteの間違いじゃないの?
0872デフォルトの名無しさん2007/10/06(土) 19:49:06
>>871

ああ、ゴメン そう16byte

どうやって作るの?
0873デフォルトの名無しさん2007/10/06(土) 20:01:55
ちなみに、コードは
#! /usr/bin/perl
# rc6.pl

use Crypt::RC6;

my $key = "";

my $cipher = new Crypt::RC6 $key;

my $plaintext = "This is apple.";

my $ciphertext = $cipher->encrypt($plaintext);

print "$ciphertext";


で、エラーは
Error: key must be 16, 24, or 32 bytes in length. at rc6.pl line 8.
0874デフォルトの名無しさん2007/10/06(土) 20:02:30
$keyは分からなかったから入れてないんだ
0875デフォルトの名無しさん2007/10/06(土) 20:10:19
for (0..0xf) { $key .= pack("C", rand(0x100)) }
0876デフォルトの名無しさん2007/10/06(土) 20:30:20
>>875

kwsk please
0877デフォルトの名無しさん2007/10/06(土) 20:33:26
875 じゃないけど簡単に書くと
my $key = '';
for(my $i = 0; $i++; $i < 16){
  $key .= pack("C", rand(256));
}
0878デフォルトの名無しさん2007/10/06(土) 20:36:15
環境が許すなら/dev/urandomから読むのがお勧め
if (open my $fh, '<', '/dev/urandom') { read($fh, $key, 16); }
0879デフォルトの名無しさん2007/10/06(土) 21:12:25
>>877,878

thx

どっちも、それぞれ書いて、$keyだけprintしてみたんだけど
877のは、何にもprintされなくて、878のは、文字化けっぽい(?とかが入ってる)のがprintされたよ・・・

どうしたら良いのか
0880デフォルトの名無しさん2007/10/06(土) 21:21:20
>>879
> どうしたら良いのか

勉強する。それしかない。
0881デフォルトの名無しさん2007/10/06(土) 21:32:52
じゃあ、おねがいだ

16bytesがどんなものかだけ、教えてくれないか
0882デフォルトの名無しさん2007/10/06(土) 21:39:01
128bitsのことだろう
0883デフォルトの名無しさん2007/10/06(土) 21:48:08
半角16文字
0884デフォルトの名無しさん2007/10/06(土) 21:55:37
>>881
君の最後の一文「教えてくれないか」 が16bytesだ。さては狙ったな
0885デフォルトの名無しさん2007/10/06(土) 22:09:50
16bytesのキーは出来た。勉強しマスタ

で、そうすると今度は

Error: block size must be 16 bytes.

ってエラーが・・・
0886デフォルトの名無しさん2007/10/06(土) 22:12:59
unicode の半角 16 文字が 16byte であるはずがない
0887デフォルトの名無しさん2007/10/06(土) 23:03:40
プッ・・・知ったかぶり
0888デフォルトの名無しさん2007/10/06(土) 23:08:52
16bytes単位に切り詰めろと言う事。
$plaintext = "A" x 0x10;
にしたらエラー出んだろ。
0889デフォルトの名無しさん2007/10/07(日) 13:00:16
このスレはキチガイの寄り合い所帯だな
0890デフォルトの名無しさん2007/10/07(日) 13:01:22
>>888

なるほど、アルファベット16文字ならOKだな

んでも、これで、利用価値あるんだかどうなんだか
0891デフォルトの名無しさん2007/10/07(日) 13:25:35

       /ニYニヽ
   (ヽ   /( ゚ )( ゚ )ヽ   /)
  (((i ) /::::⌒`´⌒::::\  ( i)))  でっていうwwwwwwww
 /∠_| ,-)___(-, |_ゝ \
( ___、  |-┬-|    ,__ )
    |    `ー'´   /´
    |         /
0892デフォルトの名無しさん2007/10/07(日) 13:28:13
1年くらい前から思ってたんだけど、このスレってやたらレベル低くね?
WebProgのPerlスレに統合しちゃった方がいいと思うよ。
0893デフォルトの名無しさん2007/10/07(日) 13:33:02
CGIって何ですか?みたいな質問連発されるのは御免被る。
0894デフォルトの名無しさん2007/10/07(日) 14:03:06
テンプレを読まない質問者は論外だけど
回答者も、どうでもいいことで揚げ足取ってたり
問題解決にも何にもなってない返答して得意になってる奴の返答が多かったりで
昔と比べるとかなり程度が低くなってるのは否めないな、
というのがROMってる俺の感想。
0895デフォルトの名無しさん2007/10/07(日) 14:23:49
んじゃ回答は君に任せた
0896デフォルトの名無しさん2007/10/07(日) 14:37:25
ROMってるって奴に「んじゃ回答は君に任せた」って書いてもしょうがないのでは
0897デフォルトの名無しさん2007/10/07(日) 14:42:00
Crypt::RC5の方が断然使いやすかったと言うことに気付いたよ
0898デフォルトの名無しさん2007/10/07(日) 14:53:19
>>894
あなたの知性を貸してください
0899デフォルトの名無しさん2007/10/07(日) 15:27:16
読解力や理解力の無い
質問者が多過ぎるのが問題。
0900デフォルトの名無しさん2007/10/07(日) 16:59:59
自称ハイレベルな人はこのスレにどうぞ

【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/l50
0901デフォルトの名無しさん2007/10/07(日) 18:40:01
activeperlだと、getppidとか実装されてませんでした(´・ω・`)
0902デフォルトの名無しさん2007/10/07(日) 20:17:10
ちょっと、お尋ねするが

Gmailのfeedの認証はBASICだとダメなの?

LWP::UserAgentで、BASIC認証してみたけどエラーが返ってきた。
0903デフォルトの名無しさん2007/10/08(月) 00:17:15
perl と CGI の区別が付かないバカ発見〜〜〜〜 ⇒⇒⇒892
0904デフォルトの名無しさん2007/10/08(月) 01:28:48
すげぇ知能低そう。よくプログラミングなんて出来るな・・・。
0905デフォルトの名無しさん2007/10/08(月) 01:46:41
プログラミングできるかどうか、そのレスだけから判断するのは不可能だ。
0906デフォルトの名無しさん2007/10/08(月) 05:23:45
>>900
裸の王様がいっぱい居そうなスレだなww
0907デフォルトの名無しさん2007/10/08(月) 06:26:43
どんなバカでもコードを書けるようにしてくれるPerl
0908デフォルトの名無しさん2007/10/08(月) 07:44:10
その点PHPには敵わない
レス数が900を超えています。1000を超えると表示できなくなるよ。