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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
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のファイルフォーマットは知らんので前後をどうべきかは
わからん。
0386nobodyさん04/08/06 14:14ID:???
>>384
my @TagsBITMAPFILEHEADER = qw/
  bfType
  bfSize
  bfReserved1
  bfReserved2
  bfOffBits
/;
my @TagsBITMAPINFOHEADER = qw/
  biSize
  biWidth
  biHeight
  biPlanes
  biBitCount
  biCompression
  biSizeImage
  biXPelsPerMeter
  biYPelsPerMeter
  biClrUsed
  biClrImportant
/;

my $bmp = {};
@{$bmp}{@TagsBITMAPFILEHEADER} = unpack('a2VvvV', substr($bindata, 0, 14));
@{$bmp}{@TagsBITMAPINFOHEADER} = unpack('VVVvvVVVVVV', substr($bindata, 14, 40));

print $bmp->{biWidth};
0387nobodyさん04/08/06 14:35ID:???
>>384
http://search.cpan.org/~gaas/Image-Info-1.16/
038838404/08/06 21:58ID:???
>>385 >>386 >>387
回答ありがとうございます。

>>386
unpackに配列を返させてまとめてハッシュに格納してるのはなんとなく分かるのですが、
以下の読み取り方法では何も表示されませんでした。
他の方法をとらなければならないのでしょうか?

$file = './tmp.bmp';
open FH, $file;
binmode FH;
read FH, $bindata, -s $file;
close FH;
0389nobodyさん04/08/07 00:13ID:???
>>388
ビットマップのパスがあってねーんじゃねーの?
俺はできたぜ?
つーかこの方法便利。サンクス>386
0390nobodyさん04/08/07 00:18ID:???
あー、ほんと>>388は便利だ。
自分で書いた各フォーマット用を全部この方法にしよーっと。
0391nobodyさん04/08/07 00:19ID:???
388じゃなく386ね
039238404/08/07 00:52ID:???
ああああああ、全角スペース元に戻すの忘れてました

LANケーブルで首吊って死につつ蘇って精進します。
0393nobodyさん04/08/07 03:22ID:???
$a1 が $aa に当てはまっていれば、その行の $b を $b1 に代入
$a2 が $aa に当てはまっていれば、その行の $b を $b2 に代入
という風にを、 $a1 〜 $a13 までやって、それに応じて $b1 も $b13 まで用意する、とやるのに、
13個ルーチンを書くのは無駄が多いような気がするんですが、簡素に書く方法ありませんか?
0394nobodyさん04/08/07 03:31ID:???
>>393
>>6 の各サイトを読んで配列やハッシュの使い方を覚えれば
簡素に書けるんじゃないかな。
0395nobodyさん04/08/07 03:57ID:???
>>393
知恵遅れ
0396nobodyさん04/08/07 04:12ID:???
>>394
foreachを使うことにしました。どうもです。
0397nobodyさん04/08/07 06:38ID:???
ルーチンとサブルーチンってどう違うのでしょうか。
パッケージ=ルーチン
メソッド=サブルーチン
と言う感じですか..?
メインルーチン=ルーチン?
0398nobodyさん04/08/07 07:03ID:???
jcode.plの使い方なんですが、
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-2
を読みましたが知りたいことが書いてないみたいなので質問させて下さい。

$a = \"あいうえお";

リファレンスを格納している変数の中身を文字コード変換するにはどうすればいいでしょうか?
jcode::convert(\$a,"sjis");
jcode::convert($a,"sjis");
jcode::convert(\($$a),"sjis");

できないのでしょうか?
0399nobodyさん04/08/07 07:42ID:WwZLffmc
>>397
調べろ
http://e-words.jp/w/E383ABE383BCE38381E383B3.html
0400nobodyさん04/08/07 09:18ID:???
>>398
それは文字列リテラルへのリファレンス代入だから、実体である文字列は
リードオンリーなのらぁ。。。
0401nobodyさん04/08/07 09:41ID:???
>>400
それを抜きにしても、型グロブ受け取るサブルーチンに
スカラーのリファレンス渡すのはどうすりゃいいか
わからんな。

やりたいことが文字コード変換ならJcode.pm使え。
0402nobodyさん04/08/07 10:06ID:M9c7I24I
下のような関数をつかって機種依存文字を判定しようと
してたのですが、�鰍ネどは判定してくれるのですが、
��のような文字は判定してくれません。
92区(0xEE9F~0xEEFC)にあたるのでこの正規表現に
含まれると思うのですが、どうしてでしょうか。
教えてください。お願いします。


# 機種依存文字の有無確認
# 有→1、無→0 を返す
sub depend_kisyu{
  my $name = shift;
  if($name){
    # 機種依存文字発見のためにsjisに変換
    &Jcode::convert(\$name, "sjis","auto");

    my $ascii = '[\x00-\x7F]';
    my $sjis_twoBytes = '[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]';
    my $sjis_pattern='[\x87\xED\xEE\xFA-\xFC][\x40-\x7E\x80-\xFC]';

    if($name =~ m/\G(?:$ascii|$sjis_twoBytes)*?((?:$sjis_pattern)+)/og){
      return 1;
    } else {
      return 0;
    }
  }
}

040339804/08/07 11:15ID:???
>>400
失礼しました
>>401
ありがとうございます
0404nobodyさん04/08/07 11:34ID:???
>>402
なぜ正規表現が正しいかという話なのに、ifだの
Jcode::convertだのがついた関数にして質問するかな?
前後に余計なものがついてると問題がぼやけるので、
$nameにいきなりその"��"をSJISで入れて、その関数の
正規表現の部分でマッチするかどうか、というところ
を調べてから出直して来い。
0405nobodyさん04/08/07 11:56ID:20zkJ4Vm
ファイルの中身をテキストエリアに表示したいのですが、
改行の場所にスペースも入ってしまって困っています。
改行などもそのままで表示したいのですが…。お願いします。
(ファイルはアスキーモードで転送しています)

open(PAGE_FILE, "test.txt");
@page = <PAGE_FILE>;
close(PAGE_FILE);

print <<"";
<form action="$program_name" method="GET">
<input type="hidden" name="title" value="$title">
<input type="hidden" name="mode" value="write">
<textarea cols="80" rows="20" wrap="off" name="text">@page</textarea><br>
<input type="submit" value="送信">
</form>
0406nobodyさん04/08/07 12:12ID:???
>>405
(解決法1)
ファイルを読むときに配列じゃなくてスカラーに読んで
そっちを使う

{local $/; $page=<PAGE_FILE>;}

(解決法2)
配列を文字列に埋め込んだときに要素間に挟む文字を
空文字列にする。

{ local $" = '';
print ...
}
040740504/08/07 12:27ID:???
>>406
1の方法で意図通り表示することが出来ました。
どうもありがとうございました。
0408nobodyさん04/08/07 13:52ID:???
sprintf,printfの使い道について質問です。

my( $sec,$min,$hour,$mday,$mon,$year,$wday,$isdat,$yday ) = gmtime (time);
my $a = sprintf "%02d:%02d:%02d GMT",($hour,$min,$sec);

他にどんな使いかたがあるでしょうか?この二つの関数についての理解を深めたいので
いろんな使い方を知りたいです。

どうぞおながいします。
0409nobodyさん04/08/07 14:21ID:???
>>408
http://perldoc.com/perl5.8.4/pod/func/sprintf.html
0410nobodyさん04/08/07 14:41ID:???
>>408
16進変換に使ってたり。
printf("%x",100);
他は普通の使い方しか知らん。
0411nobodyさん04/08/07 14:48ID:???
コマンドラインで使う時に出力文字数そろえたり。
0412nobodyさん04/08/07 14:52ID:???
>>408
my( $sec,$min,$hour,$mday,$mon,$year,$wday,$isdat,$yday ) = gmtime (time);
my $a = sprintf "%4d/%02d/%02d GMT",($year,$mon+1,$mday);
0413nobodyさん04/08/07 15:14ID:???
>>412
my $a = sprintf "%4d/%02d/%02d GMT",($year+1900,$mon+1,$mday);
0414nobodyさん04/08/07 15:15ID:???
>>410
print \x100 || hex 100;
0415nobodyさん04/08/07 15:40ID:???
>>414
\じゃなくて0じゃないの?
0416nobodyさん04/08/07 16:56ID:???
>>415
そだね。ごめんちゃ。
0417nobodyさん04/08/07 17:06ID:???
>>409
のサイトの
printf '%2$d %1$d', 12, 34; # prints "34 12"
はどういうことだろう?テストコピペして動作確認したが期待通りにはならなかったぞい。
英語が嫁ねと駄目だなorz
0418nobodyさん04/08/07 17:18ID:???
>>417
あれはネタ
0419nobodyさん04/08/07 17:26ID:???
>>417
その変換指定子の書き方は 5.8.0 からサポートされた。
http://perldoc.com/perl5.8.4/pod/perl58delta.html
0420nobodyさん04/08/07 17:40ID:???
>>418
いやネタじゃなくて5.8から入った新機能だよ。
0421nobodyさん04/08/07 18:07ID:???
@a = qw/yd83x iei5498x 0498fu 9589 00 utifdo 83udtyx/;
最後の文字がxなら    @xに
最後の文字がx以外なら  @yに

こういう正規表現を絡めたコーディングがしたいです。
@x = grep { /x\z/ } @a;
@y = grep { /[^x]\z/ } @a;
で一応できるんですが、一度目でfalseだったものはそのまま@yにいれていくような感じにしたいんですが
どうすればいいでしょう?

foreach ( @a ) {
if (/x\z/) {push @x,$_}else{push @y,$_};
}
できました^^ところで{push @x,$_}の部分、{push @x}では$_の値を自動で追加してくれないんですが
ifの実行文内では、デフォルトで$_に作用する法則?が崩れるんですか?
0422nobodyさん04/08/07 18:19ID:???
>>421
そんな法則は存在しない。
foreach ループの変数名を省略した場合は $_ に代入され、
マッチ演算子に対してマッチ結合演算子で文字列が指定
されていない場合は $_ が対象となるだけ。
0423nobodyさん04/08/07 18:22ID:???
for等の制御構文の途中で、ifをやって真ならばその回の残りの処理をせずに次回に移行させるようなことはできますか?

for($i=0 ; $i<6 ; $i++ ){
print "$i回目開始<br>";
if ( $i == 3 ){
print "$i回目終了できず<br>";
真であればこの後の処理をループして4回目に移行
}
print "$i回目終了<br>";
}
って残りの処理をelseに書けばいいんですよね;
でももっとなんか強制的に次回に移行するようなのってないですかね?
0424nobodyさん04/08/07 18:26ID:???
>>422
push関数も、第2引数を省略すると$_の値が使われると思ってましたが勘違いでしたowz
どこでやっても無理でした
0425nobodyさん04/08/07 18:26ID:???
/x$/ ? push(@x, $_) : push(@y, $_) for @a;
0426nobodyさん04/08/07 18:28ID:???
>>424
splitと勘違いしたんじゃない?漏れも昔にやっちった
0427nobodyさん04/08/07 18:30ID:???
>>425
for @a;
そんなのあるんだ。どこのサイトで勉強したの?日本語サイトなら紹介おながいします。
042842504/08/07 18:32ID:???
>>427
わたしはPerl4時代のふるーいラクダ本で
0429nobodyさん04/08/07 18:38ID:???
もしかしてperlってinとかも使えるの?
jsの
for( i in obj.array ) 〜
みたいな
0430nobodyさん04/08/07 18:49ID:???
>>423
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsyn.html#Loop_Control

>>428
後置 foreach は 5.005 で実装されたので記憶違いだろう。
http://perldoc.com/perl5.8.4/pod/perl5005delta.html#EXPR-foreach-EXPR-is-supported

>>429
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsyn.html#Foreach_Loops
0431nobodyさん04/08/07 18:57ID:???
>>430
イイ!
043242304/08/07 19:19ID:???
>>430
for($i=0 ; $i<6 ; $i++ ){
print "$i回目開始<br>";
/3/ && print "$i回目終了できず<br>" && next;
print "$i回目終了<br>";
}

できました!ありがとうございました。
0433nobodyさん04/08/07 20:37ID:pd//1imi
■■■ お勧めレンタルサーバー ■■■

★あなたのHPのアドレス長くて憶えられません!

【独自ドメインでホームページを作るならここ!】

A:無難なサーバー。 お勧め!!  
 http://www.webspeed.ne.jp/  
 http://www.wadax.ne.jp/
 http://www.ktplan.ne.jp/
 http://domainya.net/
 http://www.cpi.ad.jp/  
 http://solid.ad.jp/  

B:ある程度の障害は大目に。  
 http://www.binboserver.com/
 http://s55.net/
 http://www.j-navi.com/
 http://www.wakuwaku.ne.jp/
 http://www.j-speed.net/main/
 http://www.cyberjellyfish.com/
0434nobodyさん04/08/07 23:16ID:???
>>430
お前、こっちにもいたのか。
0435nobodyさん04/08/08 00:09ID:???
tu-ka付属ドキュメント嫁よおまいら。おおかたの答えはそこに出ている。
0436nobodyさん04/08/08 06:38ID:???
tu-ka付属ドキュメント英語だよ。英語勉強したり和訳探したり本買ったりするよりここで聞いたほうが早いよ。
っていうか付属ドキュメント読めたらCGIレベルでのコーディングスレなんかいらねよ。
0437nobodyさん04/08/08 09:46ID:???
>>436
tu-kaごもっとも
0438nobodyさん04/08/08 10:16ID:???
Linuxのコマンドでコマンドラインから入力した場合、Ctrl_cやqを
入力しないと終わらないもの(例えば"tail -f")をPerlで取り込んで
webで表示したいのですが、方法はありませんか?

open(AA,"コマンド|")で取り込んだ場合、コマンドが終了しないために
うまく取り込めないようで困っております。
0439nobodyさん04/08/08 11:20ID:???
>>438
終了させる条件を明確にしやがれ。
それが曖昧じゃ答えられるわけ無いだろ。このバカチン。
0440nobodyさん04/08/08 11:21ID:???
>>438
なんで tail -f にする必要があるの?
tail 結果を取り込むのがだめな理由は?
0441nobodyさん04/08/08 12:19ID:???
アクセスした瞬間の最終ログさえ表示できりゃいい -> tail

ログが増える度に画面更新して欲しい
・定期的にクライアント側で更新 -> javascript + tail
・サーバから垂れ流したい
 -> ログチェック用のデーモン作成。Java Flash等コネクションを貼れるものを使う。
0442nobodyさん04/08/08 14:31ID:???
>>438はtail -fは例えで言ってるだけでホントは違うコマンドとかスクリプトなんじゃないかな。
コマンドはなんでもいいとして、キーボードからの入力で終わるコマンドを取り込む場合はどうすりゃいいんだろね。
0443nobodyさん04/08/08 14:50ID:???
open(AA,"|コマンド|")
0444nobodyさん04/08/08 15:44ID:???
>>442-443
<q cite="http://perldoc.com/perl5.8.4/pod/func/open.html">
You are not allowed to open to a command that pipes both in and out,
but see IPC::Open2, IPC::Open3, and perlipc/"Bidirectional Communication
with Another Process" for alternatives.
</q>

0445nobodyさん04/08/08 17:47ID:???
>>444
ここは日本人が見るスレなんだから他国語じゃ通じないよ。
正直おまいみたいに頭のいいやつはこのスレで質問しない。でもおまいみたいに頭のいいやつがいないと
このスレは成立しない。だからやさしくしてね^^
0446nobodyさん04/08/08 17:55ID:???
>>445
444じゃないけど、検索エンジンって知ってる?自分の好きな言語の解説読めばいいじゃん。あほ?
0447nobodyさん04/08/08 18:29ID:???
コピペしかできない奴の方がアホだと思う。
0448nobodyさん04/08/08 18:37ID:???
>>435 だよなぁ。。。

英語が読めないとほざくバカチョン様へ

まずは、コード例をみてみましょう。
そして気になるところがあったら、その部分の解説英文をコピーして、
http://www.excite.co.jp/world/english/
に貼り付けてみましょう。

バカチョンな訳しかできないけれども、それなりに真意は読めてきます。
気をつけるところは大文字の MUST や MAY などの大文字を小文字に変換してみましょう。
あとは脳内で「日本語置換」するのではなく、「英文を感じ取る」のです。

と、ここまで書いてみたところで、バカチョン様には無理でしょうねぇ。
0449nobodyさん04/08/08 18:49ID:???
>>445
>>6
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_open_FILEHANDLE_MODE_LIST
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_can_I_open_a_pipe_both_to_an
0450nobodyさん04/08/08 18:51ID:???
$a = 1 unless $a;

$aが未定義であれば代入するっていうunlessを使った処理だけど、
たいていのリファレンスサイトではこの処理を↓で説明してるよね。

unless ( $a ){ $a = 1 }

簡単な処理の場合は一行目の書き方のほうがいいと思うんだけど、何故か一行目の書き方も
できると説明してるサイトは見たことない(perl.doc等ならあるだろうけど日本人の作ったサイトでは見てない)。
perlのバージョンによって通用するか異なる書き方だからかな?それともなんかやめておいたほうがいい理由があるのかな?

0451nobodyさん04/08/08 18:54ID:???
$a ||= 1;
0452nobodyさん04/08/08 18:56ID:???
未定義と0って見分ける方法ある?
045344504/08/08 18:57ID:???
>>all
俺は何も質問してないよ;

>>446
で、試しに>>444と同じ事を日本語で説明してるサイト探してみなよ。
面倒くさくないか?

>>447
せっかくの回答者に暴言吐くな

>>448
今度疑問があったときにやってみるね。
0454nobodyさん04/08/08 18:57ID:???
defined
0455nobodyさん04/08/08 18:58ID:???
>454
thx
045645004/08/08 19:00ID:???
>>452
ごめん

$a = 1 unless defined $a;
■ このスレッドは過去ログ倉庫に格納されています