くだすれPerl(超初心者用)2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/03/03(月) 05:07:32ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0507nobodyさん
2008/08/05(火) 22:10:42ID:???cpan[1]> install Gtk2
CPAN: Storable loaded ok (v2.18)
Going to read /root/.cpan/Metadata
Database was generated on Mon, 04 Aug 2008 19:02:47 GMT
CPAN: YAML loaded ok (v0.66)
Going to read /root/.cpan/build/
............................................................................DONE
Found 24 old builds, restored the state of 24
Running install for module 'Gtk2'
Running make for T/TS/TSCH/Gtk2-1.183.tar.gz
Has already been unwrapped into directory /root/.cpan/build/Gtk2-1.183-N08YV3
-- No Makefile created, won't make
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
0508nobodyさん
2008/08/05(火) 23:23:39ID:???Makefile.PL かなんかあんだろうから、そん中見て、わかんなかったら手で叩いて様子を見てみちゃどうか。
0510508
2008/08/07(木) 00:54:10ID:???>>491 参照。
どうやったらうまくいったね?
原因はなんだったんだろうね?
そういう情報が世界の役に立つのね。
感謝はおいしくいただきたいのね。
0513nobodyさん
2008/08/07(木) 03:09:13ID:???プログラム業界では特に嫌われる罠。まあそれは勝ち組って事だが、他の業界でも大抵そうだから、結局だめな罠。
まあくだ質だから、こういうのも仕方ないかw
0518nobodyさん
2008/08/07(木) 08:12:39ID:???ここ荒らされてもこまるしな
でもオフラインドキュメントにもよさはあるよ。
0519nobodyさん
2008/08/07(木) 09:13:34ID:???0521nobodyさん
2008/08/07(木) 11:02:54ID:???From: [330] デフォルトの名無しさん <sage>
Date: 2008/07/27(日) 00:15:07
>>327
勉強したいなら本ばっか読んでないで
プログラム書けよ
受験勉強じゃねーんだからw
0522nobodyさん
2008/08/07(木) 13:53:58ID:???日本語しか分からないというのなら、らくだ本じゃなくて翻訳ソフトを買うことを推奨する。
EffectivePerlは一通り読む。
クックブックは買って常備する。
Perlの質問の答えは、だいたいPerldocかクックブックのどっちかに載ってる。
0523nobodyさん
2008/08/07(木) 14:11:37ID:???オライリーの「CGIプログラミング」って、初めてのPerl読んだくらいで理解できる?
それとも、続・初めてのPerlくらいの知識が要求されるんだろうか?
0524nobodyさん
2008/08/08(金) 00:32:20ID:???BOOK:
for ( @want_to_read ) {
$book = new Book($_);
$book->read($_);
if ( $book->did_understand() ) {
$book->sale_to('Book-off');
}
else {
push @read_later, $book;
}
next BOOK;
}
0526nobodyさん
2008/08/08(金) 14:27:50ID:???0527nobodyさん
2008/08/08(金) 14:33:01ID:???0528nobodyさん
2008/08/09(土) 22:29:21ID:???Apacheはかんたんにインストールできるけど、これって自分もサーバになるってことでしょ?
セキュリティとかむちゃくちゃ怖くない?
でも設定ファイルとか超難しいし…みんなどうやって勉強したの?
0529nobodyさん
2008/08/09(土) 22:39:09ID:???0530nobodyさん
2008/08/09(土) 22:58:23ID:???そんなに難しいかぁ?
ってか、cgiやhtml的な知識だけでなく、
そうゆうことも含めてテストしたり、調整、制御できるのが、
ローカルサーバー組む利点ではないのかな?
(なにも自鯖で公開するとかって意味ではなくね。)
0531nobodyさん
2008/08/10(日) 00:23:14ID:???とりあえず設定ファイルのアクセス制限を「俺専用」に書き換えるだけの
知識でいいんだからあんまり難しく考えなくていいよ。
よく分からないままいろいろ公開してる人よりは怖がってるぐらいのほうがいいかな。
0533nobodyさん
2008/08/10(日) 20:41:19ID:SuPNfSed$aaaa= とすると、該当する数値が例えば2と5と10のように複数ある場合、
この中で一番大きい数字を $aaaa_maxにしたいのですが、記述を教えてください。
説明が下手で申し訳ないのですが、伝わった方、よろしくお願いします。 m(_ _)m
0534533
2008/08/10(日) 20:48:29ID:SuPNfSed$aaaa_max="$aaaaの中の一番大きい数値";
としたいのです。(^^;
0535nobodyさん
2008/08/10(日) 22:12:07ID:???$aaaa_max=0;
ループ{
$aaaa= ; # $aaaaをひとつ取得する (2,5,10)
if($aaaa>$aaaa_max){
$aaaa_max = $aaaa;
}
}
print $aaaa_max;
・モジュールと配列使うなら
use List::Util qw(max);
@aaaa = (2,5,10);
$aaaa_max = max @aaaa;
print $aaaa_max;
0536nobodyさん
2008/08/11(月) 00:37:27ID:???print $aaaa_max;
$aaaa が複数の値になるらしいからループ案でいいんだろうね。
0537nobodyさん
2008/08/11(月) 06:09:49ID:???0538nobodyさん
2008/08/11(月) 08:45:40ID:???0539nobodyさん
2008/08/11(月) 22:49:56ID:???0540nobodyさん
2008/08/11(月) 23:15:47ID:???0541533
2008/08/12(火) 02:23:53ID:ihBdNY6vなんとか希望通りできました。
感謝してます。
もう一つ教えていただきたいのですが・・
$total_plus = $totalの数値 + $total{'count'}の数値
としたい場合の記述を教えていただけると助かります。
よろしくお願いします。 m(_ _)m
0542nobodyさん
2008/08/12(火) 02:38:17ID:???0543541
2008/08/12(火) 02:56:40ID:???お騒がせしました。
0544nobodyさん
2008/08/12(火) 13:48:33ID:Iypx/LW1行ごとに配列にまとめたいのですがどうしたらいいでしょうか?
よろしくおねがいします。
my($fh,$cond) = @_;
while(<$fh>){
return [
$_,
$fh->eof ? undef : $fh->getline,
$fh->eof ? undef : $fh->getline,
$fh->eof ? undef : $fh->getline,
] if /$cond/;
}
return;
}
0546nobodyさん
2008/08/12(火) 17:06:12ID:???カスタマイズは自分でしてね。
use Data::Dumper ;
my @arr ;
while (<>) {
next if ! /Data/ ;
push @arr, [ $_, map{ eof() ? () : scalar <> ; } 0 .. 2 ] ;
# 一箇所限定なら、以下でも良いんじゃね?
# push @arr, $_, map{ eof() ? () : scalar <> ; } 0 .. 2 ;
# last ;
}
print Dumper \@arr ;
0547nobodyさん
2008/08/12(火) 17:06:58ID:???0548nobodyさん
2008/08/12(火) 17:28:46ID:???0550nobodyさん
2008/08/12(火) 20:56:45ID:???してしまえばヤリたい放題でつ (><;)
0551nobodyさん
2008/08/12(火) 21:51:51ID:???Can't locate File/Slurp.pm in @INC (@INC contains: ><;)
0552nobodyさん
2008/08/12(火) 22:29:55ID:???my @lines = read_file('foooooooooo.txt');
chomp(@lines);
my @list;
foreach(0..$#lines){
$lines[$_] =~ m/hogehoge/ or next;
push(@list, [@lines[$_..$_+3]]);
}
これで、ヤリたい放題になるって本当ですか?
0553nobodyさん
2008/08/13(水) 00:18:01ID:???ヤリたいコトとヤる相手とヤる場所によります。
気取ったイケメンが自宅四畳半なら >>545。
慣れない奴がミラパルコで大回転なら >>546。
絶倫がロイヤルスイートで小さい相手とヤるなら >>552。
それぞれ可能なオプションが異なります。
0554nobodyさん
2008/08/13(水) 07:03:24ID:???0556nobodyさん
2008/08/17(日) 17:53:31ID:???とやるとHTMLとしてブラウザ上に出力されるのは分かるのですが、同じようなやり方で
ファイル出力をする方法はないでしょうか?
一々
print FILE $mojiretu;
と打つのもアレなので、何か方法があったらよろしくお願いいたします。
利用環境
フリーのCGIサーバー:isweb
対象ブラウザ(関係ないと思いますが……):基本的にFireFox2,3、ie6,7、OSはwin、macで動けばいいと考えています。
以上です。よろしくお願いいたします。
0557nobodyさん
2008/08/17(日) 18:18:27ID:???アレって?
0558556
2008/08/17(日) 18:22:55ID:???申し訳ありません。
一々
print FILE $mojiretu;
と打つのも面倒なので、何か方法があったらよろしくお願いいたします。
と訂正します。
0559nobodyさん
2008/08/17(日) 18:24:59ID:???え? これ打つのが面倒なの?
プログラミングやめた方がいいよ
0560nobodyさん
2008/08/17(日) 18:25:42ID:???{ここに文字列を入力する}
{ここに文字列を入力する}
{ここに文字列を入力する}
HTML
print FILE $mojiretu;
0561nobodyさん
2008/08/17(日) 18:36:29ID:???なんたら
なんたら
HTML
0562556
2008/08/17(日) 20:07:42ID:???ヒアドキュメントというキーワード(560さんや561さんが教えてくださったもの)で調べたら、目的の物がありました。
本当に有難うございます。
0563556
2008/08/19(火) 02:01:55ID:???0564556
2008/08/20(水) 00:20:47ID:Pb480w2m0565556
2008/08/20(水) 05:37:21ID:???昨日の、スポーツドリンクがいけなかったのかしら。
0566556
2008/08/21(木) 04:50:49ID:???小さい塊が、まだ少し入っているようだ。
0567556
2008/08/21(木) 17:33:02ID:???0568nobodyさん
2008/08/22(金) 09:30:05ID:???0569556
2008/08/22(金) 09:40:41ID:???仕方なく会社で用を足す。俺の階は、大便用が3つしかないから、朝はラッシュ時に壮絶なバトルが、展開される。。。
0570nobodyさん
2008/08/22(金) 19:30:36ID:???0571nobodyさん
2008/08/22(金) 21:38:16ID:???hoge$hensu{key}のような感じなのですが…
0573nobodyさん
2008/08/22(金) 23:56:24ID:???${"hoge$hensu"}{key}
ただしこれが可能なのは以下の条件を満たす場合です:
- 対象のハッシュがパッケージグローバルであること。
- それを行うスコープで事前に no strict 'refs' して制限を緩めておくこと。
# もちろんコード全体を use strict していますよね?
より望ましい解は >>572 が言うように「シンボリックではない」リファレンスを使うことです。
リファレンスを活用した「ハッシュのハッシュ」、すなわち二次元ハッシュがあなたの望むものです。
%hoge = ();
$hoge{'hoshinoa'}{key} = 'ki';
$hensu = 'hoshinoa';
print $hensu, $hoge{$hensu}{key}, "\n";
この方法には前述のような制限がありません。
シンボリックリファレンスが strict で制限されていることからも分かるように、イマドキはこちらが主流です。
0574nobodyさん
2008/08/23(土) 00:01:15ID:???よくわかりませんががんばろうと思います><
0575nobodyさん
2008/08/23(土) 00:20:11ID:???0576573
2008/08/23(土) 00:45:43ID:???元の >>571 の質問に関する話題は perlfaq7 の "How can I use a variable as a variable name?" で詳しく触れられています。
さらに、リファレンスについては perlreftut, perlref の両ドキュメントに、また多次元配列及びハッシュについて perllol に、もっと詳しい話が載っています。
ぜひ見てみてください。
0577nobodyさん
2008/08/23(土) 00:49:36ID:???はい表示が「ほしのあき」になりましたってやかましいんじゃ、というお話だから
そんなに難しいことじゃないよ。
>>573
何か疲れてませんか。
0578573
2008/08/23(土) 00:56:40ID:???分かりやすい素敵な説明ありがとうございます。
# 認めたくないものだな……、昨日未明まで客先でトラブっててロクに寝ないまま一日働いた後だということを……。
0580nobodyさん
2008/08/23(土) 16:45:17ID:???%hash{'$hensu'} = (
'AA' => 'AA',
'BB' => 1,
'CC' => 65,
'DD' => 1200
);
のようにリストで代入することはできないのでしょうか、
perllolをみたんですけど多くの数を一度に代入する方法について載ってないような、
0581nobodyさん
2008/08/23(土) 18:49:15ID:???「多次元ハッシュ」などと事実とことなる認識の仕方を
しているから、3秒考えればわかることを思いつけないんだ。
0582nobodyさん
2008/08/23(土) 19:14:49ID:???0583nobodyさん
2008/08/24(日) 13:25:05ID:abdzrOGO環境はMac OS X 10.5.4, Perl 5.8.8です。
CPANでXML::Atomをインストールしたいのですが、
make testの段階で以下のようにFailedになっている箇所があって
インストールできません
| t/00-compile...........ok
| t/01-util..............ok
| t/02-content...........ok 1/32
| # Failed test in t/02-content.t at line 57.
| # got: 'My name is 宮川.'
| # expected: 'My name is 宮川.'
| t/02-content...........NOK 22# Looks like you failed 1 test of 32.
| t/02-content...........dubious
| Test returned status 1 (wstat 256, 0x100)
| DIED. FAILED test 22
02-contentというファイルで実際にテストしているっぽい部分は以下のようになっていました
| $content->body("My name is \xe5\xae\xae\xe5\xb7\x9d.");
| is $content->mode, 'xml';
| is $content->body, "My name is \xe5\xae\xae\xe5\xb7\x9d.";
「\xe5\xae\xae\xe5\xb7\x9d」を「宮川」という漢字として
出力できていないのが原因っぽい気がするのですが。。
解決の方向性だけでもご教示いただけると助かります。
よろしくお願いします。
0584583
2008/08/24(日) 13:32:45ID:abdzrOGO意図した通り表示されなかったのですが、
実際は以下のようにgot:〜の行には文字コード(?)、
expected:〜の行には「宮川」という漢字が表示される状態です。
| # got: 'My name is \xe5\xae\xae\xe5\xb7\x9d..'
| # expected: 'My name is 宮川.'
0585583
2008/08/24(日) 13:37:07ID:???以下のような出力でした。実際は&が半角です。
| # got: 'My name is &#x5BAE;&#x5DDD;.'
| # expected: 'My name is 宮川.'
0586nobodyさん
2008/08/24(日) 14:07:58ID:???で、\xe5\xae\xae\xe5\xb7\x9dは、UTF-8で「宮川」だ
何が知りたいんだっけ?
0587nobodyさん
2008/08/24(日) 16:23:03ID:???0588nobodyさん
2008/08/24(日) 20:05:54ID:???なんちゃら…
}
とやったら、Range iterator outside integer range と叱られました。
桁デカ杉なんでしょうか。どうすればいいですか?(><)
0589nobodyさん
2008/08/24(日) 20:12:58ID:???$content->mode は xml で合っていて、
$content->body は (x|x?ht)ml の文字参照に置き換えられている状態ですね。
その動作でかまわなければ、
t/02-content.pl 内の、
is $content->body, "My name is \xe5\xae\xae\xe5\xb7\x9d.";
を以下に変更すればそのテストに関しては通ると思われます。
is $content->body, "My name is 宮川.";
その動作ではまずい場合は、モジュール内の関連コードをいじるしかないかなあ。
0590nobodyさん
2008/08/24(日) 20:15:09ID:???0591nobodyさん
2008/08/24(日) 20:27:10ID:???ありがとうございます!
ググったら分かる人が分かる人向けに書いたドキュメントしかみつかりません(><)
もう少しググって諦めます。
0592nobodyさん
2008/08/24(日) 20:29:59ID:???0593590
2008/08/24(日) 20:43:08ID:???5.8.0 から導入された bigint プラグマを使う方法もある。遅いがちゃんと動く。
use bigint;
# あとは何も考えずに書くだけ。
# さすがにこれならおまえでもやれる。がんばれ。
# 遅いので部分的に無効にしたい場合
{
no bigint;
# bigint じゃなくてもいい処理
}
0594nobodyさん
2008/08/24(日) 20:57:43ID:???use bigint;
for (2000000000000000..3000000000000000) {
なんちゃら…
}
!Range iterator outside integer range at…
ActivePerl 5.8.8 Build 822 (><)あーーー
0595nobodyさん
2008/08/24(日) 21:22:25ID:???マルチ乙。
>>594
こう書くしかないんじゃ?
for (my $i = 2000000000000000; $i <= 3000000000000000; $i++) {
つかなんで、くだすれに質問してんだか。
0596583
2008/08/24(日) 21:22:33ID:???レスありがとうございます。
わかりにくくて申し訳ないです。
状況としては本来「宮川」と表示されるべき文字列が、
HTMLの文字参照に置き換えられて「&#x5BAE;&#x5DDD;」となっているので
make testでひっかかっているという状況でした。
>>589
ありがとうございますー。
話がわかっていただけて嬉しいです。エスパーですね。
私も先程なんとか文字参照に置き換えられているのに気付いて
モジュールのソースとにらめっこしたんですが
それらしい部分を見つけられず。。
…と思ったら、libxml2のバージョンが古いと
非ASCII文字が強制的に文字参照に変換されてしまうらしいです。
MacPortsで新しいバージョンのlibxml2を入れたら解決しました!
いろいろとありがとうございましたー。
0597use bigintの人
2008/08/24(日) 21:32:12ID:???エラーがでなくなりました!
>>593
親切に本当にどうもありがとう!!
0599nobodyさん
2008/08/24(日) 22:08:03ID:???>>590
perldoc perldiag
> Range iterator outside integer range
> (F) One (or both) of the numeric arguments to the range operator ".." are outside the range
> which can be represented by integers internally. (snip
use Math::BigInt;
my $num = Math::BigInt->new('2000000000000000');
my $addone = $num + "1";
for ($num .. $addone) { sleep 1 }
Range iterator outside integer range at - line 4.
0600nobodyさん
2008/08/24(日) 22:58:52ID:???system q|cls|;
use bigint;
use Win32::Sound;
$|=1;
#----------------------------------
for (my $i = 2000000000000000; $i <= 3000000000000000; $i++) {
say "$i";
Win32::Sound::Play("file.wav");
}
↑こりゃーおもろい
0601590
2008/08/24(日) 23:16:40ID:???おお。そゆことだったんですね。
さらに、
> One possible workaround is to force Perl to use magical string increment
> by prepending "0" to your numbers.
ということは…、
for ('02000000000000000'..'03000000000000000') {}
おおぅ、これで動作したよおい。^^;
0602nobodyさん
2008/08/24(日) 23:35:23ID:???0603nobodyさん
2008/08/25(月) 09:43:11ID:???use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
for (my $a=10000;$a>=1;$a=$a-1){
system q|cls|;
say "お前の寿命はあと".$a."秒";
}
0604nobodyさん
2008/09/01(月) 10:36:16ID:???<a href="file:///C:/Kudasure/Kudasure.pl?http://pc11.2ch.net/test/read.cgi/php/1204488452/">[Kudasurepl]</a>
とやってWebブラウザからKudasure.plを呼んでいるのですが、
?以降の文字列を取得する事が出来ません。
$ARGV[0]には入ってないし…。
うまく受け取る方法を教えてください。
0605↑ 補足です
2008/09/01(月) 10:38:05ID:???Webサーバ等は起動していません。
0606nobodyさん
2008/09/01(月) 10:48:50ID:???0607604
2008/09/01(月) 11:04:42ID:???Webサーバを常駐させたくないんです。
他にKudasure.plに文字列を渡す方法があれば教えてください。
Kudasure.pl自体は動作してます。
■ このスレッドは過去ログ倉庫に格納されています