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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0286nobodyさん04/07/31 15:04ID:???
>>284
pathって打ってみて、表示されたリスト内にperl.exeのフォルダがなければパスが通ってない。
設定はシステム→詳細設定→環境変数から。pathを選んで好きな位置にフォルダを追加する。
(他のフォルダとは ; で区切る)
0287nobodyさん04/07/31 15:25ID:???
>>283
cpan、cpan言ってないでまずはperl自体を勉強汁。そうすれば、cpanのことも自ずと分かってくる。
ちなみに、webにあるperl講座とかは殆どが始めてやる香具師用だ。
それがちゃんと探してから言った言葉なら、冗談抜きで理解力無いんだと思うぞ。
perlの事がそこそこ分かってきて、cpanのライブラリも利用しようということになったら下のサイトが大いに役に立つだろう。
http://www.cpan.jp/
0288nobodyさん04/07/31 15:28ID:RsJc0bwQ
ありがとうございます。
pathと打つと、
PATH=C:\WINDOWS\system32;"%path%;C:\Perl\bin;C:\Perl\bin\;C:\WINDOWS;C:\WINDOWS\
system32\WBEM;
と表示されます。
perl.exeはC:\Perl\binに入っていたので、大丈夫だと思うのですが…。
0289nobodyさん04/07/31 16:16ID:???
再起動してみれ
0290nobodyさん04/07/31 18:24ID:???
"%path%

おもいっきりおかしいとこあるじゃん!
0291nobodyさん04/07/31 19:50ID:???
( ゚ д゚) …

何をどうやったらそんなものが紛れ込むんだろう
0292nobodyさん04/07/31 22:49ID:JonE4G7J
>>287
�dクス。勉強汁よ・・・
0293nobodyさん04/08/01 02:50ID:???
前前スレくらいで、QandA集を作るって言ってたものです。
忘れてたんですが、ちょっと思い出して作ってみたんですが、どうでしょう。
Subjectは適当に付けて、Question&Answerはほどよくコピペするといいと思います。
http://xxxyz.zive.net/~the2/mod-perl/thefaq/faq.cgi
0294nobodyさん04/08/01 03:19ID:???
>>293
乙!

これから一覧が長くなると探すのが大変だから
検索機能あるといいね。
0295nobodyさん04/08/01 07:05ID:???
チャットのログファイルを読み込んでHTMLをはき出すCGIを作っています。

画像のURLがあった場合、その画像を拾ってきてサーバに保存する機能を付けたのですが、
画像のあるサーバが落ちている場合などは
connectがエラーを返すまでに時間がかかってしまいます。
connectがタイムアウトする時間を設定することはできないのでしょうか?
Windows上のサーバでCGIを動かすのでalarmが使えずに困っています。
0296nobodyさん04/08/01 08:00ID:???
その画像の著作権の方は大丈夫なのか?
029729504/08/01 08:47ID:???
著作権ですか
どういう画像が貼られるかわからないのでなんとも・・・
アプロダも似たようなものだと思うんですがどうなんでしょうね
0298nobodyさん04/08/01 08:53ID:???
チャットにIMGタグで張られた画像がそのままだとF5アタックと変わらんしな。
029929504/08/01 09:43ID:???
OpenNapのチャットログなのでタグの心配はないんです
0300nobodyさん04/08/01 11:30ID:???
>>295
普通は timeout 設定できるやろ
君がどういうライブラリ/クラス/関数使ってるかわからんのでやりかたはなんとも言えんが
0301nobodyさん04/08/01 12:11ID:???
>>293
半自動化できそうだな。
0302nobodyさん04/08/01 12:25ID:???
wget なら窓でもあったっけ?
0303nobodyさん04/08/01 13:19ID:???
普通にあるし
0304nobodyさん04/08/01 14:40ID:???
>>293です。
登録してから再編集する機能をつけました。 このシステム自体荒らしに弱いのが難点なので、バックアップ機能もつけておきます。

>>301
やっぱり、人の手で判別して人の手でちょっと編集するのが一番だと思うのですが。

暇だったら登録お願いします。
http://xxxyz.zive.net/~the2/mod-perl/thefaq/faq.cgi
0305nobodyさん04/08/01 14:43ID:???
>297
アプロダも「自分で描いた絵」なら全く無問題。
他人の絵を無断でアプしたら著作権侵害。
他人がやっているから自分もいいと考えるのはただの自己厨。
そういうシステムを作ろうってなら、まずは著作権を勉強しろ。
0306nobodyさん04/08/02 05:33ID:???
foreach (@array) {
push @req, $_ if ++$hash{$_} == 2;
}

++$hash{$_} == 2 ここの部分の意味教えてください・・・
0307nobodyさん04/08/02 05:50ID:???
>>306
hash : http://www5a.biglobe.ne.jp/~n_rieko/perl/4.htm
++ : http://www5a.biglobe.ne.jp/~n_rieko/perl/5.htm#5-1
== : http://www5a.biglobe.ne.jp/~n_rieko/perl/5.htm#5-4
$_ : http://www5a.biglobe.ne.jp/~n_rieko/perl/6.htm#6-4
0308nobodyさん04/08/02 12:10ID:???
>>306
$hash{$_} の値をインクリメントして「から」、2 と数値比較。
0309nobodyさん04/08/02 13:08ID:???
require 'lib.pl';
$lib = new LIB;
とやってlib.plにpackage LIB;
とやって、
print "Content-type: text/html\n\n";
とやってもエラーがでます。
「require 'lib.pl';」
「$lib = new LIB;」
この2つの行を消したらエラーは出ずに表示されるんですが、
なんでエラーがでるのでしょうか?
0310nobodyさん04/08/02 13:23ID:???
lib.pl の中に
new サブルーチンあるの?
0311nobodyさん04/08/02 16:44ID:???
>>309
エラーログ見ろ
0312nobodyさん04/08/02 20:51ID:???
「エラーがでます」だからどうした?言いたいことはそれだけか?
0313nobodyさん04/08/03 08:57ID:bp7Se8/y
スレッド天国 http://specters.net/cgipon/ のスレッド式掲示板の
スクリプトを改造してる形になるんですが、リンクをクリックしたら
ある変数に値を代入(ここでは$#aaaに1を入れたい)するというのは
どうすればいいんでしょうか?そのあとにIFを設置して条件分岐の材料に
したいのですが、下の通りにやっても処理されてくれません。元の文はこれです。

$body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D">);

で、これを

$body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D" $#aaa=1>); とか、
$body .= qq(<A $href="$thisfile?$reload&sch=%5B$tnm%5D&$#aaa=1">); とかにしても
うまく動作しないんです。こういう処理って無理なんでしょうか?
0314nobodyさん04/08/03 09:23ID:???
>>313
無理。あーんど、スレ違い。
0315nobodyさん04/08/03 20:27ID:???
PerlでLinuxサーバにコマンドを打ってそれを実行させる?ような
記述方法をお聞きしたいと思います。

例えば、Perlで作ったフォームに「Shutdown」というボタンがあったとして
このボタンを押すと「shutdown -h now」というコマンドがサーバに
反映されてサーバ機が止まるような。

こういうことって出来るのでしょうか?
0316nobodyさん04/08/03 20:30ID:???
>>315
例のshutdownの実行には、root権限が必要そうだが、コマンドを実行するだけなら、exec(), system(), open(), ``などの方法がある
0317nobodyさん04/08/03 20:35ID:???
>>315
sudoでapacheに権限与えて実行
0318nobodyさん04/08/03 20:55ID:???
>>316
openで指定のファイルを開いてprintですか?

これなら方法はわかるし、できるかも。。
0319nobodyさん04/08/03 23:10ID:???
(゚Д゚ )ハァ?
0320nobodyさん04/08/03 23:49ID:???
うーん。>>316-317を見て「そうあっさり答えるのが普通なの?」と
思ったんだけど、俺が神経質すぎるだけなのかなあ。

フォームのボタンで/sbin/以下をごにょごにょするって話にしては
なんだか呆気なく感じたんだけど、気にしすぎ?

# スレ違いでごめんなさい。
0321nobodyさん04/08/03 23:53ID:???
>>320
んー、なんで?
0322nobodyさん04/08/04 00:04ID:???
popenじゃなくてopenなの?、perlって
0323nobodyさん04/08/04 00:07ID:???
>>322
そうなんだよ
だから、書き捨てスクリプト作るときには
涙出るほど便利
032432004/08/04 00:17ID:???
>>321
うまく言えないんだけど、
入門書にある「print `pwd`; してみよう」レベルのことを尋ねてる人が、
「ブラウザから鯖を halt させたい」ってところに引っかかったのかな。
最近、セキュリティがアマアマの自宅鯖を見すぎてるだけかも。
0325nobodyさん04/08/04 00:43ID:???
>>324
共有鯖ならばシャットダウンに必要な権限を得られないから問題無い。
シャットダウンに必要な権限が得られる個人鯖ならどうなろうと知ったこっちゃないので、やっぱり問題無い。
032632004/08/04 00:50ID:???
>>325
わかりやすい意見をありがとうございます。
2行めを読んで激しくスッキリしました。

コーディングと関係ない話で引っ張って失礼しました。
0327nobodyさん04/08/04 01:14ID:???
アパティをオペレータ権限で動かせ!!
032830904/08/04 17:21ID:???
>>310
!!
すいません、ありませんでした。
ご返答はりがとうございます
0329nobodyさん04/08/05 06:51ID:A93W0UIN
Perlのオブジェクト指向の解説サイトを色々読んでるけど、アクセスメソッドを作るか迷ってるんだけど
みんなはちゃんと、アクセスメソッド作ってやってる?

今作ってるやつはオブジェクトのメンバ変数(プロパティ)が結構な数あるからいちいち個々に対するアクセスメソッドを
作るのは冗長な気がするんだよね。中にはハッシュとかもあるし;

シンボリックリファレンスありにすれば1個で済むような気がするけど、知恵を貸してください。
033032904/08/05 07:03ID:A93W0UIN
とりあえずコンストラクタの一例
sub new{
my $self = shift;
my %form;
foreach ( split /&/,shift ) {
( my $a , my $b ) = split /=/;
$b =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$form{$a} = $b;
}
bless {
form => %form
},$self;
}

ちょっとプロパティを減らしたけど、とりあえずこんな感じ。
それでmainの方で
my $obj = Testclass->new($ENV{'QUERY_STRING'})
としてから随時HTML出力途中に
$obj->{form}{hoge}
として参照したいけど、これをアクセスメソッドを介してのものに変えたい。



0331nobodyさん04/08/05 08:28ID:???
>>329-330
http://perldoc.com/perl5.8.4/pod/perlsub.html#Autoloading
http://perldoc.com/perl5.8.4/pod/perltoot.html#AUTOLOAD--Proxy-Methods
0332nobodyさん04/08/05 08:54ID:o7gPPImy
連想配列の添え字を全て小文字にする関数もしくは処理を
教えて頂けないでしょうか?phpのarray_change_key_case
http://php.s3.to/man/function.array-change-key-case.html
のようなものを探しております。
0333nobodyさん04/08/05 08:58ID:???
>>332
@new{ map lc, keys %old } = values %old;
033432904/08/05 09:01ID:A93W0UIN
英語読めねよ
0335nobodyさん04/08/05 09:08ID:???
@a=qw/1 2 3 4/;
@_[0]=\@a;

この@_[0]をデリファレンスするにはどうsればいいですか?
@@_[0]
@$_[0]
とかではできませんでした。

それと
@$#_[0]
みたいなことをして、配列の最後の番号を知りたいんですが、どうすればいいですか?
0336nobodyさん04/08/05 09:38ID:???
>>335
@_[0]=\@a;は正しくない。正しくは$_[0]=\@a;
デリファする時は@{$_[0]}のように{ }で囲む。
要素見るときは$_[0][N]、最大添字は$#{$_[0]}。
0337nobodyさん04/08/05 09:43ID:???
>>334
>>6
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Autoloading
http://perldoc.jp/docs/perl/5.8.0/perltoot.pod
0338nobodyさん04/08/05 10:20ID:???
RFCとか、大事なものはほとんど英語だよ。
日本語のマニュアルしか受け付けないって人は止めた方がいいと思うよ
033932904/08/05 10:54ID:A93W0UIN
>>337
ありがと。でもアクセスメソッドとのつながりがイマイチわからん。
下のはアクセスメソッドのこと書いてるけど、冗長だよね。
ひとつのアクセスメソッドでどんなコンストラクタにでも使える、どれだけオブジェクトデータが複数でも
使えるやつにしたいんだけど、ゆっくり自分で考えるよ。ありがとう。

>>338
ほんと日本人には不利だよね。というか英語圏の人間はそれだけでずいぶん楽なんだろうな。


034033504/08/05 11:02ID:???
>>336
ありがとうございました!できました^^
0341nobodyさん04/08/05 11:46ID:???
>>338
>ひとつのアクセスメソッドでどんなコンストラクタにでも使える、どれだけオブジェクトデータが複数でも
>使えるやつにしたい

無理だろ。どんなクラスでもこのアクセスメソッドで完全にokなんてのがあったら、有名になってるって。
できたら金やるよ
0342nobodyさん04/08/05 11:47ID:IwD+3Zuu
やり方はけっこうですので、質問させて下さい。
jcode.plで受け取ったデータを「EUC」に変換した後、
EUC特有の「全角英数→半角英数」の処理を施し、
その後再び、「SJIS」に変換する、といった処理は可能でしょうか?
0343nobodyさん04/08/05 12:22ID:???
>>342
できる。
半角英数を全角SJISにしたい場合は個別に対応して完了。
EUC特有の半角英数って???
0344nobodyさん04/08/05 12:32ID:???
やり方はけっこうですので、質問させて下さい。

orz =3
034532904/08/05 12:41ID:A93W0UIN
>>341
どんなコンストラクタでも使える、どんなオブジェクトにも使えるアクセスメソッドってのは
さすがにまだだけど、とりあえずできたよ。

呼び出しを
$obj->access([path1,path2,.....],代入したいならここに);
こんな感じにして。第一引数に例えば$obj->{form}{hoge1}の場合は
[form,hoge1]
みたいな無名配列のリファレンス渡しで一応カタグロブ以外は対応できた。
0346nobodyさん04/08/05 13:16ID:???
[email protected]
[email protected]
[email protected]

みたいな感じになっているファイルを開いて

[email protected],[email protected],[email protected],

こんな風にカンマで区切って、こいつを変数にするにはどうしたらいいのでしょうか。
エロイ人教えて...
034733204/08/05 13:38ID:o7gPPImy
>>333
早!そしてありがとうございます!
こりゃ自分では答えが出ませんでした。
0348nobodyさん04/08/05 14:06ID:???
>>346
俺はエロクないから答えるべきでないかもしれんが、
とりあえずそのファイル名をhogeと仮定して。

open ( FH , "hoge.txt" );
$a = join ",",<FH>;

ってのはどうだ。
0349nobodyさん04/08/05 14:40ID:???
>>348
改行コードを取り除く必要があるなり

chomp(my @i = <FH>);
$mail = join(',', @i);
0350nobodyさん04/08/05 15:05ID:???
$/ = ',';
とかはどうだろう?
0351nobodyさん04/08/05 15:13ID:???
>>350
??

orz =3
0352nobodyさん04/08/05 15:43ID:???
>>348-349
できました。ありがとうエロイ人!
035332904/08/05 15:49ID:A93W0UIN
アクセスメソッド。呼び出しは
my $value = $obj->access(path1=>hoge,path2=>hogeがハッシュ、配列のリファレンスならその続きをここに,value=>代入したい値);
突っ込んでくれるとどこを改良すればいいかのめぼしがつくからうれしい。
sub access{
my $self = shift;
my %atr = (path1 => undef,path2 => undef,value=>undef,@_);
if ( !($atr{path2}) ) {
  if ( ref $self->{$atr{path1}} eq "SCALAR" ){
    if ( $atr{value} ){${$self->{$atr{path1}}} = $atr{value};}
    return ${$self->{$atr{path1}}};
  } elsif ( ref $self->{$atr{path1}} eq "ARRAY" ){
    if ( $atr{value} ){@{$self->{$atr{path1}}} = $atr{value};}
    return @{$self->{$atr{path1}}};
  } elsif ( ref $self->{$atr{path1}} eq "HASH" ){
    if ( $atr{value} ){%{$self->{$atr{path1}}} = $atr{value};}
    return %{$self->{$atr{path1}}};
  } else {
    if ( $atr{value} ){$self->{$atr{path1}} = $atr{value};}
    return $self->{$atr{path1}};
  }
} elsif ( !($atr{path3}) ) {
  if ( $atr{value} ){$self->{$atr{path1}}{$atr{path2}} = $atr{value};}
  return $self->{total}{prtotal};
}}
0354nobodyさん04/08/05 16:11ID:???
サブルーチンの呼び出しについてなんですが、print <<EOF;〜EOFのヒアドキュメントの途中で
サブルーチンを呼び出す時は、一度ヒアドキュメントを終了して、
&subrootin();
等として呼び出すしかないんでしょうか?少し面倒な感じなのでもし、もっといい方法がありましたら教えて下さい。
0355nobodyさん04/08/05 16:11ID:???
>>353
AUTOLOAD使ったほうが早くない?
0356nobodyさん04/08/05 17:05ID:???
>>354
ヒアドキュメントにサブルーチンが返す文字列を埋め込みたいと
いう話なら

${\(&subrootin();)}

または

@{[&subrootin();]}
0357nobodyさん04/08/05 17:28ID:???
printf <<EOF,$value, subroutine($value);
test
%s = subroutine(%s)
EOF
でもいいと思うし。
0358nobodyさん04/08/05 17:29ID:???
>>357
> printf <<EOF,$value, subroutine($value);
逆だ鬱。
printf <<EOF, subroutine($value),$value;
0359nobodyさん04/08/05 19:46ID:???
>>356-358
早速ありがとうございます!
>>356
ばっちりできました!
>>357-8
printfについて勉強が浅かったので、今解説サイトのprintfとsprintfのページみて少しは
わかってきましたが、>>357-8さんのコーディングがまだ理解できませんorz
難しいですね

036035404/08/05 20:06ID:???
359です。名前入れ忘れてPCフリーズしてました;

>>356さんの教えてくれた方法は、サブルーチンが返す値を出力するときのみなんですよね?
サブルーチンでprintしてる場合は何故か変なところに出力されてしまいました;
printが2重になってしまうのでやっぱり無理ですよね。
0361nobodyさん04/08/05 20:18ID:???
>>355
AUTOLOADは早くないと思う。

>>353
アクセッサーの自動生成なら。他 CPANに 同様のClass::モジュールが多数有
http://perldoc.jp/docs/modules/Class-Accessor-0.18/Accessor.pod
0362nobodyさん04/08/05 20:28ID:???
>>361
速いじゃなくて、早いで楽って意味だったんだ
駱駝本にも載ってるしね
0363nobodyさん04/08/05 21:08ID:???
>>361
たかだがアクセスメソッドのために、モジュールを一個useするのって重くないか?
極力削りつつ、汎用的でいけてるプログラムを目指さなきゃ。
0364nobodyさん04/08/05 21:38ID:???
>354
別の方法もあるが、一度ヒアドキュメントを終了して書く方が後々面倒じゃないので、
ヒアドキュメント閉じる方がいい方法だと思う。
036536104/08/05 22:41ID:???
>>362
ごめん。実行速度の事だと勘違いしてました。

>>363
でも、頻繁に使われるものだから、何度も書き直すものではないよ。
似たようなコードが複数のファイルに散らばると保守が面倒になるし、
僕ならモジュール使う方を選ぶけど。

主張の違いは置いておいて、AUTOLOAD使うとしたらこんな感じかな。

sub AUTOLOAD {
# getter/setterを呼出時に自動定義
my ($self, $value) = @_;
return if $AUTOLOAD =~ /::DESTROY$/;
if ($AUTOLOAD =~ /::((get|set)_?(\w+))$/) {
if ($2 eq 'get') {
eval "sub $1 { my (\$self) = \@_; return \$self->{lc($3)} }";
return $self->{lc($3)};
}
if ($2 eq 'set' and defined $value) {
eval "sub $1 { my (\$self,\$val) = \@_; \$self->{lc($3)} = \$val }";
$self->{lc($3)} = $value;
}
}
}

書いてて思ったんだけど、>>353 のコード
配列とかハッシュはリファレンスを返せば充分じゃない?
0366nobodyさん04/08/05 23:59ID:???
>>365
キー名に__PACKAGE__を付けて継承されたときとかに安全になるようにしろ、と駱駝本にある
0367nobodyさん04/08/06 00:59ID:???
ひあどきゅめんとはすたっくできる。

print <<EOF,&subhoge('hoge'),<<EOF;
hogehoge
EOF
hogehogehoge
EOF
0368nobodyさん04/08/06 01:16ID:Qwf6u7BB
ちょと質問です。
perldoc -f pack
を読むと template の S, I, L のバイトオーダは機種依存とありますが
N, V の方はどうなんでしょうか?
N は big-endian, V は little-endian と機種に依存しないような体で書かれているんですが。
0369nobodyさん04/08/06 01:27ID:???
hogehage.png hagehoge.png honehone.png ...という配列の中身をそのままにして
一つずつの配列を出力する時にhogehage.gif hagehoge.gif honehone.gif...と出力
させたいのですが、楽な方法はありますかね?
bashの
for $i in *.png
do;echo ${i%.png}.gif;done;
と同じように考えていただければ良いのですが…。
0370nobodyさん04/08/06 01:36ID:???
>>369
foreachかな
037136904/08/06 01:41ID:???
splitして.gif付けるだけで良い事が分かりますた。
>>370
ちと違うな…。加工部分がわからなかったんで。
037236804/08/06 01:58ID:???
自己解決です。
間抜け晒してお恥ずかしい
037332904/08/06 05:44ID:???
>>365
>書いてて思ったんだけど、>>353 のコード
>配列とかハッシュはリファレンスを返せば充分じゃない?
漏れ的にはオブジェクトをとても親切な人として想定してるので、
リファレンスのまま返すのはちょっと無愛想かなって;
0374nobodyさん04/08/06 06:33ID:???
$_ の中に x=数字 という文字列が何度かあって、その数字を全て足し合せたくて、

foreach (/x=(\d+)/g) { $sum = $sum + $_; }

としたのですが、もっと綺麗とか高速とかな書き方はないでしょうか?
0375nobodyさん04/08/06 06:48ID:???
>>374
+=
0376nobodyさん04/08/06 07:03ID:???
変数名やサブルーチン名にはアンダスコア(_)が使える(他も使えるけど)けど、
前にどこかでサブルーチン名にアンダースコアを含ませる時は何かの注意をするように
って書いてるサイトを読んだ。

うろ覚えでどこのサイトかもどんな注意かも忘れちゃってて、今ググテみたけどそんな注意らしきことは
どこにも見当たらない。サブルーチン名にアンダースコアを含んで、含まないときと異なる注意点ってあったっけ?
0377nobodyさん04/08/06 08:45ID:???
>>376
<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
単語を区切るためにアンダースコア (_)を使いましょう。これは、
一般的に言って $VarNamesLikeThis よりも $var_names_like_this の
ほうが、特に英語のネイティブスピーカーでない人にとっては、読む
のが簡単です。 これは VAR_NAMES_LIKE_THIS のような場合でも
有効である単純な 規則です。
<snip />
名前の先頭にアンダースコアを使うことで、その変数や関数がそれが
定義されているパッケージの外では使うべきでないということを表わす
ために使うことができます。
</q>

__LINE__ や __FILE__ といったリテラルトークンと同名のサブルーチン
は作るのも呼び出すのも難しい。

*__LINE__ = sub { 1 };
print &__LINE__;
0378nobodyさん04/08/06 08:57ID:???
>>377
あぁ、作るのは別に普通に作れるな。
呼ぶ時はプレフィクスが必ず要るけど。
037937604/08/06 09:04ID:???
>>377
ありがとう!多分先頭がアンダスコアの変数、サブルチンはパッケージ外では使わない
っていうのを中途半端に覚えていたせいで、変に怖かったんだ;

0380nobodyさん04/08/06 10:49ID:DHgT8QqI
すんません。「/aa」という文字をマッチさせたいんですが、書き方って

文字列 =~ //aa/

でいいの? それとも/の前になんか必要?
0381nobodyさん04/08/06 11:00ID:???
>>380
\
0382nobodyさん04/08/06 11:00ID:???
>>381
さんくす
0383nobodyさん04/08/06 11:21ID:???
$hoge ~= {/aa};
エスケープをエスケープして↑じゃ駄目か?
0384nobodyさん04/08/06 11:48ID:???
質問です。

bmpファイルから画像情報を抜き出そうとしています。
$hexdata = unpack("H*",$bindata)として
424d36e80300000000003604000028000000fe0200004c010000 (0x1A以降略
ここまで取得することができました。     ↑
矢印の「fe02」の部分がWidthで「766」に変換したいのですが、
どのように変換するのがスマートでしょうか?

hex(substr($hexdata,36,2))+hex(substr($hexdata,38,2))*256
で一応取得はできるのですが文字列として扱ってる時点から冗長過ぎる気がします。
0385nobodyさん04/08/06 14:07ID:???
>>384
unpackでv使え。

% perl -e '$s="\xfe\x02"; ($w)=unpack("v", $s); printf "%d\n", $w;'
766

bmpのファイルフォーマットは知らんので前後をどうべきかは
わからん。
■ このスレッドは過去ログ倉庫に格納されています