トップページ⇒php
981コメント390KB

くだすれPerl(超初心者用)2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/03(月) 05:07:32ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0575nobodyさん2008/08/23(土) 00:20:11ID:???
なんかすげーむずかしそうだな。
05765732008/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:???
$hoge{ほしのあ}{キー} に「き」を代入して、$hensu に「ほしのあ」を代入して、
はい表示が「ほしのあき」になりましたってやかましいんじゃ、というお話だから
そんなに難しいことじゃないよ。

>>573
何か疲れてませんか。
05785732008/08/23(土) 00:56:40ID:???
>>577
分かりやすい素敵な説明ありがとうございます。
# 認めたくないものだな……、昨日未明まで客先でトラブっててロクに寝ないまま一日働いた後だということを……。
0579nobodyさん2008/08/23(土) 08:35:29ID:???
>>577
何を言ってるのか、さっぱりわからん><
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:???
>>580
「多次元ハッシュ」などと事実とことなる認識の仕方を
しているから、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」を「宮川」という漢字として
出力できていないのが原因っぽい気がするのですが。。
解決の方向性だけでもご教示いただけると助かります。

よろしくお願いします。
05845832008/08/24(日) 13:32:45ID:abdzrOGO
すみません、上の書き込みでバックスラッシュを半角で書き込んだら
意図した通り表示されなかったのですが、
実際は以下のようにgot:〜の行には文字コード(?)、
expected:〜の行には「宮川」という漢字が表示される状態です。

| # got: 'My name is \xe5\xae\xae\xe5\xb7\x9d..'
| # expected: 'My name is 宮川.'
05855832008/08/24(日) 13:37:07ID:???
たびたびすみません、今度こそ最後にします
以下のような出力でした。実際は&が半角です。

| # got: 'My name is 宮川.'
| # 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:???
モジュールWWW::Mechanizeでクッキーを受けとるにはどうしたらよいのですか?
0588nobodyさん2008/08/24(日) 20:05:54ID:???
for (2000000000000000..3000000000000000) {
 なんちゃら…
}
とやったら、Range iterator outside integer range と叱られました。
桁デカ杉なんでしょうか。どうすればいいですか?(><)
0589nobodyさん2008/08/24(日) 20:12:58ID:???
>>583
$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 &#x5BAE&#x5DDD.";

その動作ではまずい場合は、モジュール内の関連コードをいじるしかないかなあ。

0590nobodyさん2008/08/24(日) 20:15:09ID:???
>588 Math::Bigint
0591nobodyさん2008/08/24(日) 20:27:10ID:???
>>590
ありがとうございます!
ググったら分かる人が分かる人向けに書いたドキュメントしかみつかりません(><)
もう少しググって諦めます。
0592nobodyさん2008/08/24(日) 20:29:59ID:???
あきらめたらそこで試合終了でした。
05935902008/08/24(日) 20:43:08ID:???
>>591
5.8.0 から導入された bigint プラグマを使う方法もある。遅いがちゃんと動く。

use bigint;
# あとは何も考えずに書くだけ。
# さすがにこれならおまえでもやれる。がんばれ。

# 遅いので部分的に無効にしたい場合
{
no bigint;
# bigint じゃなくてもいい処理
}
0594nobodyさん2008/08/24(日) 20:57:43ID:???
>>593
use bigint;
for (2000000000000000..3000000000000000) {
 なんちゃら…
}
!Range iterator outside integer range at…

ActivePerl 5.8.8 Build 822 (><)あーーー
0595nobodyさん2008/08/24(日) 21:22:25ID:???
>>587
マルチ乙。

>>594
こう書くしかないんじゃ?
for (my $i = 2000000000000000; $i <= 3000000000000000; $i++) {

つかなんで、くだすれに質問してんだか。
05965832008/08/24(日) 21:22:33ID:???
>>586
レスありがとうございます。
わかりにくくて申し訳ないです。
状況としては本来「宮川」と表示されるべき文字列が、
HTMLの文字参照に置き換えられて「&#x5BAE;&#x5DDD;」となっているので
make testでひっかかっているという状況でした。

>>589
ありがとうございますー。
話がわかっていただけて嬉しいです。エスパーですね。
私も先程なんとか文字参照に置き換えられているのに気付いて
モジュールのソースとにらめっこしたんですが
それらしい部分を見つけられず。。

…と思ったら、libxml2のバージョンが古いと
非ASCII文字が強制的に文字参照に変換されてしまうらしいです。
MacPortsで新しいバージョンのlibxml2を入れたら解決しました!
いろいろとありがとうございましたー。
0597use bigintの人2008/08/24(日) 21:32:12ID:???
>>595
エラーがでなくなりました!

>>593
親切に本当にどうもありがとう!!
0598nobodyさん2008/08/24(日) 21:44:20ID:???
>>593,595

こんな便利なものがあるんだな。
0599nobodyさん2008/08/24(日) 22:08:03ID:???
質問者さんは 2e+15 から 3e+15 までループが回って解決でいいんだけど、別方面が。

>>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:???
use feature qw( :5.10 );
system q|cls|;
use bigint;
use Win32::Sound;
$|=1;
#----------------------------------
for (my $i = 2000000000000000; $i <= 3000000000000000; $i++) {
say "$i";
Win32::Sound::Play("file.wav");
}

↑こりゃーおもろい
06015902008/08/24(日) 23:16:40ID:???
>>599
おお。そゆことだったんですね。
さらに、
> 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 utf8;
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:???
ローカルのhtmlに
<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:???
file:///C:/Kudasure/〜で直接リンクしてあって、
Webサーバ等は起動していません。
0606nobodyさん2008/09/01(月) 10:48:50ID:???
……Webサーバを通す
06076042008/09/01(月) 11:04:42ID:???
文字列を渡してローカルで処理したいだけなので、
Webサーバを常駐させたくないんです。
他にKudasure.plに文字列を渡す方法があれば教えてください。
Kudasure.pl自体は動作してます。
0608nobodyさん2008/09/01(月) 11:22:08ID:???
ローカルのhtmlに書く理由は?

perl Kudasure.pl "http://pc11.2ch.net/test/read.cgi/php/1204488452/"
みたいな感じでいいんじゃないの?
06096042008/09/01(月) 11:43:44ID:???
>>608
やりたい事はまさにそれなんですが、URLのリストが沢山あって
それを保存してます。htmlなら一覧を見られて1クリックで実行できます。
0610nobodyさん2008/09/01(月) 11:55:13ID:???
そのhtmlから>>608みたいに羅列して
バッチファイルを作っちゃダメなの?
06116042008/09/01(月) 12:25:44ID:???
○○.batを作れということですか?
リストのどれがクリックされるか分からないので
html生成時にバッチファイルを作成できません。
0612nobodyさん2008/09/01(月) 12:26:20ID:???
インターフェースがHTMLならWebサーバ経由で叩くしかない
直接実行できたら問題あるだろjk
0613nobodyさん2008/09/01(月) 12:31:30ID:???
もう、ローカルにapacheでも入れたら?
0614nobodyさん2008/09/01(月) 12:42:30ID:???
>>607
> Webサーバを常駐させたくないんです。

Windowsにはスーパーサーバって無いの?
06156042008/09/01(月) 12:43:12ID:???
>直接実行できたら問題あるだろjk
Perlスクリプトの実行自体はfx3で問題なくできてます。

Webサーバはインストールしてありますが、
ツールのために常時起動させたくなくて質問しました。
直リン、ワンクリックで使えると便利なので。

しかし、出来ないと分かって諦めがつきました。
クリップボードで渡してみる事にします。
0616nobodyさん2008/09/01(月) 12:49:42ID:???
あ、ほんとだfirefoxだとできるんだすげー
0617nobodyさん2008/09/01(月) 14:21:02ID:???
firefox3だけど、perlのスクリプト、実行されないよ。
うちだけ?
0618nobodyさん2008/09/01(月) 14:25:45ID:???
>>615
ならfirefox3スレで聞くべき内容じゃん
0619nobodyさん2008/09/01(月) 14:43:08ID:???
何気に便利だったりする。
0620nobodyさん2008/09/02(火) 10:14:49ID:???
そもそも実行環境が無いとか
0621nobodyさん2008/09/03(水) 22:14:02ID:Mtq7kJsd
サイトに来た人のIPアドレスを記録するスクリプトを作りたいと思っています。

===ソースコード===
1 #!/usr/bin/perl
2
3 $IP_addr = $ENV{REMOTE_ADDR};
4
5 if ($count = open(OUT, ">>List.dat")) {
6 flock OUT, 2;
7 print OUT $IP_addr;
8 flock OUT, 8;
9 close OUT;
10 } else {
11 $count = 100;
12 }
13
14 print "Content-type: text/html\n\n";
15 print "IPアドレス:", $ENV{REMOTE_ADDR}, "<br>";
16 print '$count = ', $count;

これを実行してみると、ファイルが開けずに$count=100が表示されてしまいます。
同じフォルダ内でopen関数は使えたので、できそうな感じはするのですができません。

どこを書き直したら、IPアドレスを記録してくれるのか教えてもらえないでしょうか。
お願いします。

0622nobodyさん2008/09/03(水) 22:49:00ID:???
List.datが既存なら書き込み権限があるかどうか
List.datを作成ならそのディレクトリに実行権と書き込み権があるかどうか
06236212008/09/03(水) 23:04:45ID:Mtq7kJsd
>>622
アドバイスありがとうございます。
解決しました・・・。

/var/www/htmlに上のスクリプトを置いてあるのですが、
/var/www/htmlとスクリプトのパーミッションは777なので、
書き込み権限はあると思います。
後はスクリプトのほうでファイルを作成してくれるのかと思いましたが、
作成されていなかったのですが、
List.datを用意してあげたら問題なく書き込めました。

open (OUT, ">>List.dat")の追加書き込みでは、ファイルがなければ作成する、と
手元の参考書に書いてあったのですが何が原因だったのでしょう・・・。
0624nobodyさん2008/09/03(水) 23:16:56ID:???
>>623
この場合、スクリプト自身のパーミッションは関係しません。
List.dat を置くディレクトリのパーミッションが重要です。
0625nobodyさん2008/09/03(水) 23:24:03ID:???
>>623
> 手元の参考書に書いてあったのですが何が原因だったのでしょう・・・。

それを調べられるのはお前だけ。
0626nobodyさん2008/09/03(水) 23:24:17ID:???
そういうのは777じゃなくてギリギリ最低限のパーミッションはいくつか、を常に考えたほうがいいよ。
わかってしまえばこの手のことに悩まなくなるよ
0627nobodyさん2008/09/04(木) 00:02:51ID:???
> 5 if ($count = open(OUT, ">>List.dat")) {

ここで $count にどんな値が入るという想定になってるんだろ。
0628nobodyさん2008/09/04(木) 18:42:58ID:???
ActivePerlを下ろしてきてインストール後cpanからモジュールを
下ろしcpan モジュール名としたところ

Alert: While trying to 'parse' YAML file
'D:\Perl\cpan\FTPstats.yml'
with 'YAML::XS' the following error was encountered:
Usage: YAML::XS::LibYAML::Load(yaml_str) at D:\Perl\lib/YAML/XS.pm line 70.

というエラーらしきものがでて先に進むことがができません。他に何か必要
なのでしょうか?
0629nobodyさん2008/09/04(木) 19:11:10ID:???
PPMでやるんじゃない?
0630nobodyさん2008/09/04(木) 20:01:44ID:???
できました、ありがとうございます
0631nobodyさん2008/09/05(金) 01:31:58ID:???
>>627
perldoc -f open を穴が開くまで嫁。
06326272008/09/05(金) 01:45:29ID:???
>>631
> Open returns nonzero upon success, the undefined value otherwise.
> If the open involved a pipe, the return value happens to be the pid of the subprocess.

こういう値を「$count に代入して表示」するコード(>>621)に疑問を持ったんだけど、読み足りない?
穴が開くほどは読んでない。
0633nobodyさん2008/09/05(金) 01:56:39ID:???
>>632
じゃあ通りすがりのおれが特別に教えてやるよ
>>621はIPアドレスを記録するのが目的で、$countは制御がどこに移ったかを確認するためだけのもの

ま、if文で必ず真偽が代入されるからelseは余計だけどな
06346272008/09/05(金) 02:41:42ID:???
>>633
特別に教えてくれてありがとう。「else なら 100」用ということで。

$is_success ぐらいのほうが似合うぞぐらいの気持ちで書いたもんに
>>631が来るとは思わなかった。
06356312008/09/05(金) 02:53:49ID:???
>>634
失礼した。カルシウム足りないらしい。

ブールで済む話ならむしろ代入は要らんし、
>>621 程度の処理なら or die でも事足りるところを、
あえて表示用に拾ってるなら >>633 ってことだね。
0636nobodyさん2008/09/05(金) 10:58:48ID:???
プログラム板から越してきました。

ActivePerl 5.10 で Mail::IMAPClient を使って、Gmail に接続。
未読メールの添付ファイルを取ってくる……というスクリプトを書いているのですが、
取ってきた添付ファイルが軒並み破損してしまっており、正常なものが取得できません。

具体的にどんな感じになるのかというと、
PDF = ファイルが壊れている、と出て開けない。
JPG = 画像の下の方がブロックノイズ(最後までデータができていないっぽい)
HTM = ファイルの最後の方で途切れてしまう。
TXT = ファイル末尾に謎の文字化け。(=ェ��攵モ]スクラmエ輜オラ ←こんなのが。なんだこりゃ。)
となります。

ソースは >>637 に貼ります。
どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?
0637nobodyさん2008/09/05(金) 11:00:04ID:???
use strict;
use MIME::Parser;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $parser = new MIME::Parser;
$parser->output_to_core(1);

my $socket = IO::Socket::SSL->new(PeerAddr => 'imap.gmail.com',PeerPort => 993) or die "socket(): $@";
my $client = Mail::IMAPClient->new(Socket => $socket, User => 'user', Password => 'password') or die "new(): $@";

if ( $client->IsAuthenticated() ){
 $client->select('INBOX');
 my @uid = $client->unseen;
 foreach my $id (@uid) {
  my $message = $client->message_string($id) or warn "Timeout!";
  my $entity = $parser->parse_data($message);
  my $header = $entity->head;
  if ( $entity->is_multipart ){
   my $parts_count = $entity->parts;
   for (my $i = 1; $i < $parts_count; $i++) {
    my $part_entity = $entity->parts($i);
    my $filename = $part_entity->head->recommended_filename;
    my $filebody = $part_entity->bodyhandle->as_string;
    open(FILE, ">$filename");
     print FILE $filebody;
    close(FILE);
   }
  }
 }
}
0638nobodyさん2008/09/05(金) 11:24:52ID:???
>>636
超初心者用スレで質問する内容じゃないと思うけど。。。
テキストファイルも化けてるから解決にはならないと思うけど、binmodeはしたほうがいい
06396362008/09/05(金) 11:54:09ID:???
>>638
他に質問スレが見あたらなかったもので……スミマセン。

binmode も試している(先のソースじゃ消えてしまってました)のですが、やはり同様です。
ただ、binmode にしないと JPG ファイルは読み込みすらできなくなります。

ここでかれこれ数時間詰まっちゃってますヽ(´Д`;)ノ
0640nobodyさん2008/09/05(金) 17:52:29ID:???
>>636
> どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?

クイズ?
0641nobodyさん2008/09/05(金) 18:20:32ID:???
>>636
添付無しならおk?
0642nobodyさん2008/09/05(金) 18:25:42ID:???
>>636
> どのようにしたら、正常なファイルを取得することができるのか教えていただけないでしょうか?

デバッグして問題点を見つけ出し、そこを修正すれば良い。
0643nobodyさん2008/09/05(金) 18:44:30ID:???
MIME::Parserだな
06446362008/09/05(金) 18:59:17ID:???
確かにデバッグして問題点見つけられればいいんですが、正直お手上げ状態なんです。

>>641
添付無しのメール、本文を抜き取る分には問題ないみたいです。
ただ添付ファイルを拾おうとすると、前述のとおりに問題が出てしまいます。

>>643
MIME::Parser の使い方がどこかおかしいでしょうか。初めて使うモジュールなもので……。
0645nobodyさん2008/09/05(金) 19:07:30ID:???
>>644
> 添付無しのメール、本文を抜き取る分には問題ないみたいです。
> ただ添付ファイルを拾おうとすると、前述のとおりに問題が出てしまいます。

じゃあ、問題ないメールをgmailを通さずに直接パーザに食わせて見ろ。
0646nobodyさん2008/09/05(金) 20:40:32ID:???
>>645
おおお、いけました!

Mail::IMAPClient の message_to_file で一度ファイルに保存してから、
MIME::Parser で処理したら正常にファイルを取得することができました。

公開されてるモジュールでこんなこともあるんですね。勉強になりました。

0647nobodyさん2008/09/05(金) 20:51:35ID:???
>>646
品質が高いから公開されているのじゃあない。
公開してフィードバックを活かすから品質が上がるのだ。
# CPAN でもマイナーモジュールの中にはソースがアレなのもたくさんあるのよ。

解決おめでとう。

現象を David にレポートして、そのサイクルに貢献するのも一興。
0648nobodyさん2008/09/07(日) 20:34:27ID:???
【コミュニティーサイト作成有志募集!】

現在コミュニティーサイトGaccoで有志を募集しています。
詳しい概要等は
→http://www36.atwiki.jp/vipvipschool/
こちらをご覧下さい。

・プログラミングができる方
(現在技術陣は6名です)
・ウェブデザイン・画像編集能力がある方
(現在デザイン陣は2名です)
・宣伝能力のある方
(人員募集やサイト完成後の宣伝等。動画編集ができると○。)

を募集しています。
気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。

スレッド:ttp://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/l50
0649nobodyさん2008/09/11(木) 04:32:33ID:Fj1BKArt
perl初心者です。よろしくお願いします。
複数の行からなる配列を特定の行で行ったソートと同じ順に並び変えたいのですがうまくいきません。

例として下の@hairetu1を昇順にソートして、それと同じソートを他の4つの配列にも施したいです。

@hairetu1=[30,80,50,90]
@hairetu2=[3,8,5,9]
@hairetu3=[さん,はち,ご,きゅう]
@hairetu4=[a,b,c,d]
@hairetu5=[3305,2206,1600,1128]

↑を↓の様にソートしたいのです。

@hairetu1=[90,80,50,30]
@hairetu2=[9,8,5,3]
@hairetu3=[きゅう,はち,ご,さん]
@hairetu4=[d,b,c,a]
@hairetu5=[1128,2206,1600,3305]


みなさんは複行配列のソートはどうされているのでしょうか
お教えいただけませんでしょうか。どつぼにはまっています。
0650nobodyさん2008/09/11(木) 05:12:08ID:???
$a <=> $b −−>大きくなる順番だから、「昇順」
$b <=> $a −−−>小さくなる順番だから、「降順」


用語はこれで合ってる?
0651nobodyさん2008/09/11(木) 05:13:02ID:???
@hairetu5=[1128,2206,1600,3305]


これってどういうルールで並び替えたのかよくわからない。
単に間違い?
0652nobodyさん2008/09/11(木) 05:15:25ID:???
@hairetu3=[さん,はち,ご,きゅう]

↑これってそのままだと無理だよね?
まず、数字ではないから、数値ソートは使えない。
文字列ソートはできるが、それって単に
アスキーの順番に並び替えるだけだから。

だから、どうしてもというなら、ハッシュで
3→さん
8→はち
9→きゅう

みたいな対応表を作っておいて、それで
3,8,9を数値ソートする、という風にしないと
だめなんじゃないかな。
0653nobodyさん2008/09/11(木) 08:44:59ID:???
phpの人です
perlでHello worldと文字列を出力したいのですが表示されません
perlはc:\perlにはいってて、perl.exeはbinの中にあります
どのように書き直したら文字列を出力できますでしょうか?

#!/c:\perl\bin\perl.exe

print "<html><head><title>テストperl</title></head><body>";
print "Hello world\n";
print "</body></html>";
0654nobodyさん2008/09/11(木) 09:24:19ID:???
お前は何を言ってるんだ
0655nobodyさん2008/09/11(木) 09:32:03ID:???
>>653

#!C:/Perl/bin/perl.exe
print "<html><head><title>テストperl</title></head><body>";
print "Hello world\n";
print "</body></html>";

をtest.plと保存して、
http://hoge/test.pl
をアクセスしてみろ。
0656nobodyさん2008/09/11(木) 10:01:19ID:???
wwwサーバ使った実行ならヘッダも書いとけ
0657nobodyさん2008/09/11(木) 10:20:26ID:???
Content-Type: text/html
0658nobodyさん2008/09/11(木) 10:55:26ID:???
>>649
用途に向いたデータ構造に変更しましょう。

> @hairetu1=[30,80,50,90]

もし本当にこうだとすると、以下と等価であり、
少々不自然で扱いづらいでしょう。

@hairetu1 = ( [30,80,50,90] );
# @hairetu1 は $hairetu1[0] に無名配列リファレンスを持つ、
# 1要素のみの配列になっている点に注意。

以下は一例です。

@hairetu = (
[qw( 30 3 a 3305 さん )],
[qw( 80 8 b 2206 はち )],
[qw( 50 5 c 1128 ご )],
[qw( 90 9 d 1128 きゅう )],
);

あとは値を比較した結果を使って @hairetu の要素を入れ換える操作を行えばおっけー。
その辺の操作は調べると見つかるのでがんばって。
0659nobodyさん2008/09/11(木) 11:03:43ID:???
>>658 余計わかりにくくなってる
0660nobodyさん2008/09/11(木) 11:05:32ID:???
ワロタ
0661nobodyさん2008/09/11(木) 11:07:57ID:n+/h4em7
あっはっはwwwwwまだこのスレあったのかwwwwww
いつまでクソ言語にしがみついてんだよテメエらwwwww
いま時代はRuby,php,pythonだろwwww
乗り遅れ乙wwwww
うぇっwwうぇwww時代に乗れなくてくやしいのうwwくやしいのうwwwwww
0662nobodyさん2008/09/11(木) 11:13:08ID:???
>>649
my @hairetu1=(30,80,50,90);
my @hairetu2=(3,8,5,9);
my @hairetu3=qw/さん はち ご きゅう/;
my @hairetu4=qw/a b c d/;
my @hairetu5=(3305,2206,1600,1128);

my @array;
for (0..4) {
push @array, join(',', $hairetu1[$_], $hairetu2[$_], $hairetu3[$_], $hairetu4[$_], $hairetu5[$_]);
}
@array = sort { $b cmp $a } @array; # <=> かもしれないけどなんとなく cmp
print join("\n", @array); # この順にしたいんですよね

Excel みたいな「行と列」を思い浮かべながら @hairetu1, 略, @hairetu5 で
再現しようとするからどつぼなんだと思う。
0663nobodyさん2008/09/11(木) 12:05:15ID:???
my @hairetu1 = (30,80,50,90);
my @hairetu2 = (3,8,5,9);
my @hairetu3 = ('さん','はち','ご','きゅう');
my @hairetu4 = qw(a b c d);
my @hairetu5 = (3305,2206,1600,1128);

my @narabi = sort{$hairetu1[$b] <=> $hairetu1[$a]} (0..$#hairetu1);
foreach(\@hairetu1, \@hairetu2, \@hairetu3, \@hairetu4, \@hairetu5){
@{$_} = @{$_}[@narabi];
}

--

my @hairetu = ([30,3,'さん','a',3305], [80,8,'はち','b',2206],[50,5,'ご','c',1600], [90,9,'きゅう','d',1128]);
@hairetu = sort{$b->[0] <=> $a->[0]} @hairetu;

普通はこっち。
0664nobodyさん2008/09/11(木) 12:05:27ID:???
この超絶簡単な例題に、どうしたらそういう答え(つか思いきりバッドノウハウ)を
思いつくのか理解出来ん。データ構造が腐ってるってのを置いとくにしても、、、
my @ind = sort { $hairetu1[$b] <=> $hairetu1[$a] } 0 .. 3 ;
@hairetu1 = map{ $hairetu1[$_] } @ind ;
@hairetu2 = map{ $hairetu2[$_] } @ind ;
# 略
@hairetu5 = map{ $hairetu5[$_] } @ind ;

ちなみに自分でデータ構造から考えるなら二次元配列かhashにするに決ってる、こんなもん。
0665nobodyさん2008/09/11(木) 12:07:19ID:???
タイミングが悪かった
>>664は>>663に言ったもんじゃない
06666492008/09/11(木) 14:32:27ID:MBV8c4KU
皆さんどうもありがとうございます。助かります。
今から皆さんが教えてくれたのを全部試してやってみます。
つか自分超絶初心者です。。。
いいプログラム作れる様がんばります。
0667nobodyさん2008/09/11(木) 14:59:42ID:???
死んじゃダメだよ! ゼッタイ。
06686622008/09/11(木) 15:35:31ID:???
>>664
俺ですね。
他の配列のソート順でgdgdしてたので、質問者さんがわかりそうな道具で
「こういう感覚ですかね?」と書こうとした(ものがアレすぎたのでお怒りになった)んですけど
寝とけばよかったです。0 .. 4 とか書いてるし。

くだすれなのに「腐ってる」「こんなもん」なんてことになってるのも、その怒りの余波だと思うので
質問者さん、すみません。
0669nobodyさん2008/09/11(木) 18:40:06ID:h0fBdZdn
初心者なんですが、すいません。
コードを読んでいると$hoge[2]とかいうのはわかるんですが、

$hoge[1][0][0]=3;
$hoge[1][0][1]=5;
$hoge[1][0][2]=7;
とかいうのが出てきたんですが、これは何を意味しているんでしょうか?
0670nobodyさん2008/09/11(木) 18:48:53ID:???
>>669
多次元配列
0671nobodyさん2008/09/11(木) 18:51:07ID:???
>>669
配列の配列の配列
0672nobodyさん2008/09/11(木) 18:51:22ID:???
どういう意味で多次元配列使ったかは本人に聞く以外にはないと思う
06736692008/09/11(木) 19:14:29ID:h0fBdZdn
多次元配列ですか。ありがとうございます。調べてみます。

ところで、
$hoge[1][0][0]=3;
$hoge[1][0][1]=5;
$hoge[1][0][2]=7;
の場合、

@hoge=( [ [*,*,*], [*,*,*], [*,*,*] ], [ [3,5,7], [*,*,*], [*,*,*] ], …)という感じでしょうか?

だとしたら、この3,5,7だけを
@list=(3,5,7)の様にひとつの配列にするにはどうすれば良いでしょうか。
何度もすいません。
0674nobodyさん2008/09/11(木) 19:16:46ID:???
@list = @{$hoge[1][0]}
■ このスレッドは過去ログ倉庫に格納されています