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

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

■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ04/04/05 16:01ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0116nobodyさん04/04/10 01:31ID:???
>>112
その$xはUnicodeだよ?
011711204/04/10 02:22ID:???
ありがとうございます。なんとか表示することができるようになりました。
新しく覚えたことはまず拡張子plでwindowsのコンソールで試し、その後CGIにして動かす、というやり方で勉強していました。
今回は最初のコンソールの段階で上手くいかなかったので、その後のCGIでブラウザ表示するのをやっておりませんでした。
レスを見て、CGIでのブラウザ表示を試したところ、eucで表示が確認できました。

>>113
というわけで、そもそもブラウザでの表示を試していませんでした。

>>114
ご指摘の通り、コンソールで表示させておりました。
ソースをsjisにすることでコンソールでも表示できました。
sjisだと色々問題が発生するのでソースはeucが基本、と書いてあるHPを読んだのでeucにしておりました。

>>115>
Perl5.8だと内部ではUTF8でどうのこうの、というあたりでかなり頭が混乱しております。
なんとか「あ」が表示できたので、これをとっかかりに詳しく勉強していこうと思います。

>>116
そのへん、まだ混乱しています。is_utf8($x)だと真になるので、UTF8なのか。
でも結局無変換のままで上手くいったので、やっぱりeucなのか。
UTF8フラグの立ったeuc??
この辺がまだきちんと理解できてないので、近いうちにまた壁にぶつかる予感です。
0118nobodyさん04/04/10 20:34ID:H+y5o94i
Perlスクリプトでhttp-referrerの偽装は可能でしょうか?
リンク先に飛ぶときhttp-referrerに任意のURLをぶち込んで飛ぶということは可能でしょうか?
0119nobodyさん04/04/10 20:43ID:???
>>118
できます。
ぐぐればサンプルはいくらでも見つかります。
0120nobodyさん04/04/10 20:44ID:???
CGIスレへどうぞ。
012111804/04/10 20:53ID:H+y5o94i
>>119-120
レスありがとうございます。
CGIスレ見てみましたが、出来ないっぽいですね?
0122nobodyさん04/04/10 21:06ID:???
リファラはクライアントが勝手に吐くからね。
サーバーからはどうにもならんでしょう。
2chみたいにワンクッションさせてみるとか?
0123nobodyさん04/04/10 21:51ID:???
>>118
プロキシかブラウザを作るしかないでしょ。
0124nobodyさん04/04/10 22:07ID:zPwA0QL/
とりあえず use strict; しとけっていうのを見たんでやってみたんですが、
下のスクリプトが上手く動かないんです

use strict;
{
package Config;
$host = "www.example.com";
}
package main;
print "host = $Config::host\n";

use strictしているときは、$Config::host = "www.example.com"; って書かないといけないみたいですが
これじゃあ、package Configの意味がないですよね?
package Config; のあとに no strict; っていうのを入れないといけないんですか?

どうしたらいいんだろう・・・おしえて。
012511804/04/10 22:07ID:???
>>122-123
やっぱそれしかないですね。
0126nobodyさん04/04/10 22:22ID:???
$e1=int(rand(6));
$e2=int(rand(6));
while($e2==$e1){
$e2=int(rand(6));
}
$enemy3=int(rand(6));
while($e3==$e1 or $e3==$e2){
$enemy3=int(rand(6));
}
1〜6から、ランダムで3つの数字を重複なしで、
取り出すプログラムなんですけど、
しょぼいですよね・・・
なにか華麗な方法知ってる方いれば、教えて下さい。

0127nobodyさん04/04/10 22:24ID:???
みすった><
$e1=int(rand(6));
$e2=int(rand(6));
while($e2==$e1){
$e2=int(rand(6));
}
$e3=int(rand(6));
while($e3==$e1 or $e3==$e2){
$e3=int(rand(6));
}
0128nobodyさん04/04/10 22:34ID:???
>>124
プラグマの影響範囲を誤解している。
http://perldoc.com/perl5.8.0/pod/perlmodlib.html

>>126
1..6 をランダムな順序で持つ配列から 3 つ取り出す。
http://www.din.or.jp/~ohzaki/perl.htm#ArrayRandom
0129nobodyさん04/04/10 23:02ID:???
>>124
use strictの意味も分からずuse strictしても意味無いですよね?

perl5.6.0未満のバージョンなら
{
package Config;
use vars qw($host);
$host = "www...";
}
perl5.6.0以上のバージョンなら
{
package Config;
our $host = "www...";
}
# ...
print $Config::host;
0130nobodyさん04/04/11 00:07ID:???
>>126
何スレか前に同じ質問があった。
そのときは確か、List::Utilが使えれば一番早くて楽だっていう
結論だった気がする。

use List::Util qw(shuffle);
($enemy1,$enemy2,$enemy3) = shuffle 1..6; #@enemy[0..2] の方がいいと思う。
0131nobodyさん04/04/11 00:12ID:???
>>130
これやね。
ttp://boobar.hp.infoseek.co.jp/bench/randlist.txt
0132nobodyさん04/04/11 00:26ID:???
>>129
Perl 5.8.0使っているので、下のほうを参考にさせてもらいます。
use strict;はとりあえずつけとけと よく見るのでつけてみました。
とりあえず変数はmyつけて宣言しとくといい らしいので。
packageのなかでは our というのをつけるんですね。
>>128
プラグマですか。自分の持っている本にも少ししか触れていないし、
難しそうな考え方ですね・・・。

知らないのに何かができるわけも無いので、
頑張って勉強します。どうもありがとう、でした
0133nobodyさん04/04/11 00:36ID:???
分かった!
package内ではourをつけて宣言するんだ
(mainの中でmyをつけて宣言するのと同じように・・・ってmyの複数形なんだな)。
package内で$varとしたらグローバルになっちゃうわけですね。
0134nobodyさん04/04/11 01:34ID:???
>>133
全然違うし。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlmod.html

my 変数はシンボルテーブルで管理されていないので、同じファイル上で
宣言されていれば名前空間が変わっても参照できる。strict プラグマの
影響範囲も同様。

#!/usr/bin/perl
use strict;
package Foo;
my $foo = 'foo!'; # strict vars の影響範囲内
package Bar;
print $foo; # foo!
__END__

vars プラグマや our によって宣言された変数は strict のチェック
対象外となるだけでグローバル変数と同等。シンボルテーブルで管理
されているから $Config::host のようにパッケージ名から指定すれば
外部から参照できる。

あと標準モジュールに Config.pm があるので、パッケージ名に
Config を使うのは止めた方がいい。
0135nobodyさん04/04/11 04:40ID:???
#!/usr/local/bin/perl
use strict;
use warnings;
use sigtrap;
use diagnostics;

&main;
exit;

sub main {
 my $val1 = 1; our $val2 = 2;

 &test;

 print '$val1(' . \$val1 . qq|="$val1"\n|;
 print '$val2(' . \$val2 . qq|="$val2"\n|;
# print '$val3(' . \$val3 . qq|="$val3"\n|;
# print '$val4(' . \$val4 . qq|="$val4"\n|;

 sub test {
  my $val3 = 3; our $val4 = 4; $val1 = 5; $val2 = 6;
  print '$val1(' . \$val1 . qq|="$val1"\n|;
  print '$val2(' . \$val2 . qq|="$val2"\n|;
  print '$val3(' . \$val3 . qq|="$val3"\n|;
  print '$val4(' . \$val4 . qq|="$val4"\n|;
 }
}
0136nobodyさん04/04/11 08:05ID:???
>>117
まー大体予想通り。
>sjisだと色々問題が発生するのでソースはeucが基本、と書いてあるHPを読んだのでeucにしておりました。
最近の Perl では
>Perl5.8だと内部ではUTF8でどうのこうの
の通りコード変換を行うのでとりあえず大丈夫。
ポイントは use encoding の役割。
・ソースコードの文字コード指定(Perl がソースを解釈する際、この文字コードから UTF-8 に変換)
・標準入出力の文字コード指定(STDIN, STDOUT に対する入出力をこの文字コードに変換)
の 2 つ。つまり、>>112 のコードでは
ソースコードでは euc → Perl 解釈時に UTF-8 に変換(よってis_utf8($x)が真) →
print で(STDOUT)に出力される時点で再び euc に変換
という流れ。詳しくは perldoc encoding 参照。
0137nobodyさん04/04/11 08:29ID:???
>>132
パッケージだとかモジュールだとかについて詳しく知りたければ、「続・初めてのPerl」を
読むといいかもしれない。
正直この本に「続・初めてのPerl」とタイトルをつけるのは間違ってるという気もするけどね。
表表紙も「Perl オブジェクト、リファレンス、モジュール」っていう副題の方が文字でかいし。

>>134
細かいことだけど、正確には同じファイル上で、じゃなくて同じブロック(の前方)で、だよね。
0138nobodyさん04/04/11 10:29ID:???
>>137
ファイルスコープはブロックじゃないので、より正確には
<q>
my と local は、変数 (my の場合) やグローバル変数の値 (local の場合)
を、それをとり囲むブロック、サブルーチン、eval 、またはファイルの中が
有効範囲となるように宣言する。<cite>駱駝本 2nd Edition 2.6.8</cite>
</q>
だね。
0139nobodyさん04/04/11 12:37ID:e6FKOv37
連想配列の配列数を取得するにはどうしたらいいのでしょうか?
foreach(keys(%a)) { $i++ } のように一個一個数えていくしかないのでしょうか?
0140nobodyさん04/04/11 12:41ID:???
scalar(keys %a);
0141nobodyさん04/04/11 13:10ID:e6FKOv37
>>140 ありがとうございます
0142nobodyさん04/04/11 13:53ID:e6FKOv37
もう一個おながいします。
クラスでインスタンス毎に別個の値を保存したい連想配列があるのですが
どういう風に実装すればいいのかわかりません。
以下のようなコードだと複数のインスタンスから%aにアクセスされると
まずいことになっちゃいますよね?

my %a;

sub new {
my $self = shift;
my $obj = {
name => shift
};
bless $obj,$self;
$obj;
}

0143nobodyさん04/04/11 14:24ID:???
>>142

sub new {
my $self = shift;
my $obj = {
name => shift
};
bless $obj,$self;
$self->{HOGEHOGE} = {};
$obj;
}
0144nobodyさん04/04/11 15:12ID:U2PVfz4j
#!/usr/local/bin/perl
$addr = (gethostbyname("hogehoge.com"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /index.html HTTP/1.0\r\n\r\n";
while (<S>) { print; }
close(S);

なんて事をやったんだが、http://hogehoge.com/index.htmlのソースが表示されるワケではなく、
HTTPヘッダが表示された。

ヘッダは良いからindex.htmlのソースを読みたいんだけど、どうやればいいのかGoogle検索してもわからん
どうやるんすか?
014514404/04/11 15:26ID:U2PVfz4j
すまん、自己解決。
自分ではまだ作れないからとりあえず他人作の関数使うわ

理解は後回し
0146nobodyさん04/04/11 15:26ID:???
まずはそのヘッダに何が書かれていたか読めるようになるべきだな。
でなければLWP使え。
0147nobodyさん04/04/11 15:34ID:e6FKOv37
>>143
ありがとうございます
0148nobodyさん04/04/11 17:59ID:9ah7xv1/
# <> <= Not select Handle

<> ; # ! <STDIN>;

open File,"$ARGV" or print $!,"\n";
# Not ($ARGV[0] and @ARGV);

while(<File>){print;}
close File;

なぜに動くのか ???
デバックするとよけーに分からん

猿でも分かる説明 お願いします
0149nobodyさん04/04/11 18:32ID:???
>>148
<>は<ARGV>と同じ。

ファイルハンドルARGVは*最初に<>/<ARGV>を評価した時に*@ARGVの、
中身をファイル名のリストと見なし、$ARGV[0] .. $ARGV[n]を順に暗黙のうちにopenする。
中身がなければSTDINと同じ。
そして、この暗黙のopenの時$ARGVに開くファイルの名前を入れる。

ここまで分かれば>>148の動作も理解できるだろ?

つーかどのような経緯で>>148のようなコードを書くことになったのか非常に興味がある。
普通のスクリプトでそんなコードがあったら素で作者の正気を疑うぞ。
0150nobodyさん04/04/11 19:09ID:???
>>149
「Perlはこんなに省略できる」って意味の例文じゃなかろうか。
0151ちょー素人04/04/11 19:23ID:UpvZGEBT
パール、C言語、PHPとかいろいろなCGIがあるけど
この使い分けの意味がよく分かりません。
サーバーによって使える言語が違うということでしょうか?
015214804/04/11 19:25ID:???
<> と <STDIN> の
明確な違いを知りたかったので
自分で書いてみますた

もっと分かりやすい
スクリプトあれば教えてくだされ
0153すれ違い04/04/11 19:41ID:???
>>151
そゆこと。使いたいサーバーの使用可能言語を調べてみ?
Perlは使えない方が珍しいがCは使える方が珍しい。
0154nobodyさん04/04/11 20:46ID:???
>>153
ぉぃぉぃ嘘おしえちゃいかんよ
Perlなんて化石言語使える鯖の方が少ない
今は殆どC
0155nobodyさん04/04/11 20:53ID:???
僕もCGIの汎用比率が気になる初心者です。
今から勉強するとしたら何を学んだほうがいいのでしょうか?
ちなみに会社ではパルとPHPがメインみたいです。
0156nobodyさん04/04/11 20:59ID:???
>>155
1レス前も読めない香具師は何をやってもダメ。
ってかその前にスレタイも読めませんか、そうですか。
0157nobodyさん04/04/11 21:07ID:???
>155
マジレスすると、「なにをやりたいか」による。
会社でPerlとPHPがメインなら、そっちに磨きをかけた方がいいかもしれない。
会社がその後、ASP.NETなんかに転ぶ可能性があるなら、今のうちに勉強しておくのもいいかもしれない。


それよりもそろそろPerlのコーディングの質問はこないものか。
0158nobodyさん04/04/11 21:15ID:???
>>150もわかってないみたいだから解説してやるよ
>>152もこれ見て分からなきゃ「初めてのPerl」を百回読め

# 初めて<ARGV>とされた時に呼ばれる関数
sub __initialize_argv__{
  unless(defined fileno ARGV){
    @ARGV = ('&STDIN') unless @ARGV;
    $__internal_index__ = 0;
    $ARGV = $ARGV[$__internal_index__++];
    open ARGV, $ARGV
      or die "Can't open $ARGV: $!";
  }
}

# <>;
__initialize_argv__();
<ARGV>;

あとはARGVがEOFに達すると自動的に$ARGV[$__internal__index++]をopenするというわけだ。
0159nobodyさん04/04/11 22:36ID:???
さすがに>>154の釣りに騙されるやつは居ないな
016014804/04/11 22:41ID:???
>>158
この関数どこで定義されてんの?
0161nobodyさん04/04/11 22:46ID:???
>>160
ユーザーは呼べない。いい加減にしろ。
016214804/04/11 23:00ID:???
>>161
>ユーザーは呼べない。いい加減にしろ。

ならどうして調べたのさー
 。。。。。と逆切れしてみる w
0163nobodyさん04/04/11 23:31ID:???
書き方間違ってますか?

if (!-e image/$new){
mkdir("image/$new",0777);
chmod(0777, "image/$new");
}


0164nobodyさん04/04/11 23:34ID:???
間違ってます。
016516304/04/11 23:42ID:???
ミスってた・・解決しました。
理由は
if (!-e image/$new){
が
if (!-e "image/$new"){
にするのわすれてました・・・。゚(゚´Д`゚)゚。
0166nobodyさん04/04/12 02:29ID:???
>>163

if (mkdir("image/$new", 0777)) {
chmod(0777, "image/$new");
}
elsif (!-d "image/$new") {
die;
}
0167nobodyさん04/04/12 02:51ID:???
>>166
既にimage/$newがディレクトリとしてあった場合は?
0168nobodyさん04/04/12 03:42ID:???
ちょっとまってchomodする必要あんの?
0169nobodyさん04/04/12 04:10ID:???
あるわけないよね
0170nobodyさん04/04/12 06:57ID:???
鯖でumaskされてる時に意味があるんじゃ?
umask効いてる時は、mkdirのパーミッション指定が効かなかった記憶がある。
0171nobodyさん04/04/12 08:05ID:???
>>167
無問題。
0172nobodyさん04/04/12 10:13ID:???
文字列を裸で書く神経が分からん。
0173nobodyさん04/04/12 11:40ID:???
はだかぢゃいやぁーんおーしーまーやーのりっ♪
0174nobodyさん04/04/12 18:49ID:DgDkioXO
ある文章の / の前と後ろを分けて、それぞれスカラー値にしたいのですが、
(例)japan/korea どのような構文を使えばいいのでしょうか?
0175nobodyさん04/04/12 18:50ID:???
「split perl」でググってもうここには来るな。
0176nobodyさん04/04/12 18:54ID:???
エスケープ忘れにはまる予感
0177nobodyさん04/04/12 18:57ID:???
175 + \つけてもうここには来るな。
0178nobodyさん04/04/12 19:02ID:???
代入の仕方が分からずにはまる予感
0179nobodyさん04/04/12 19:38ID:???
177 + perlでは=が代入だからもうここには来るな。
0180nobodyさん04/04/12 19:42ID:???
リストとしての受け取り方が分からずにはまる予感
0181nobodyさん04/04/12 19:57ID:???
まんどくせ。
($hoge,$foo) = split /\//, 'japan/korea';
こんな感じですんでまた来てね♥
0182nobodyさん04/04/12 20:12ID:???
何だかんだ言いつつおまいら優しいですな。
0183nobodyさん04/04/12 22:06ID:???
$bagu = "表示不可能な予感";
# 侮ヲ不可狽ネ頼エ
これってもちろんPerlのバグですよね?
0184nobodyさん04/04/12 22:09ID:???
>>183
それってもちろんネタですよね?
0185nobodyさん04/04/12 22:39ID:???
>>183
「侮ヲ perl」でgoogle検索。
0186nobodyさん04/04/12 22:48ID:???
>>183
表☆示
ってやれば大丈夫!
0187nobodyさん04/04/12 22:51ID:???
教えてください。

PERLで「cgiを呼び出すHTML」を吐き出すcgi を作ったのですが
クエリーがうまくわたらないのです。

1.最初の(固定の)HTMLでは、ファイル中のクリッカブルマップからたとえば

  test1.cgi?hogehoge

をリンクしています。

2.test1.cgiでは QUERY_STRING から hogehoge を取り出し
 データファイルと照合して hogehogehoge というアイテム名を取り出してるので

 HTMLファイルに、

<A href="test2.cgi?hogehogehoge> と出力させています。

3.test2.cgi では、 QUERY_STRING から hogehogehoge を取り出すようにしているのですが

 ここで 空文字列しか来ていないようで、2.のHTMLファイルのリンクをクリックするとエラーです。

 test2.cgi は確かに呼び出しています。

一連の動作でやるとエラーなのですが、2.のHTMLが表示された段階でブラウザにソースを吐かせ、
それを別のHTMLファイルとして起動してやると、そこからのリンクでは、test2.cgi にちゃんと
hogehogehoge が渡っています。

何か設定を忘れているでしょうか?
0188nobodyさん04/04/12 23:11ID:???
<A href="test2.cgi?hogehogehoge>
         ↓
<A href="test2.cgi?hogehogehoge">
0189nobodyさん04/04/13 00:51ID:???
ちょっと教えてください。

Redhat8.0のperl5.8.0でLWP使って
レスポンスヘッダを編集したいんですが、
newの書式が分からないです。マジで。

require HTTP::Response;
$rc = '200';
$msg = 'OK';
$header = 'Accept-Ranges: bytes\n';
$header .= 'Content-Length: 186965910\n'
$header .= 'Content-Type: text/html\n\n';
$content = '';
$res = HTTP::Response->new($rc, $msg, $header, $content);

print "$res";

と書いたんですが、InternalServerErrorで進めません。
HTTP::Responseでレスポンスヘッダを編集する方法教えてください。
お願いします。
0190nobodyさん04/04/13 01:00ID:???
>>189
なんかグタグタですな。。。
use HTTP::Response;

$header =<<"EOS";
Accept-Ranges: bytes
Content-Length: 186965910
Content-Type: text/html

EOS

186 MB の HTML なんてブラクラですね。。。
019118904/04/13 01:04ID:???
>>190
お早い回答ありがとうございます。
いや、ヘッダー情報をいじったり削除したかっただけなんで、
値はどうでも良いかと思ってテキトーに設定しました。気をつけます。
0192nobodyさん04/04/13 07:51ID:???
print "ソkソ泣|";

Windowzで「ヌルポ」と文字化けします。
これってもちろんPerlのバグですよね?
0193nobodyさん04/04/13 08:21ID:OVsnEkWR
ごくシンプルな日記スクリプトをPERLで書いているのですが、
TEXTAREAの内容について改行の処理をしようとすると
数字の羅列になってしまいます。

  $msg = $FORM{'msg'}; #バッファからセット。URLデコード済。
 # $msg = ~ s/\r\n/<BR>/g;

この状態だと「$msg」の中身はちゃんと文字列になっているのですが
下のコメントをはずすと途端に数字の羅列になります。
(文字列を変えても同じ数字になります。)
どうすればこの状態を回避できるでしょうか?
0194nobodyさん04/04/13 08:29ID:???
すみません。自己解決しました
  $msg =~ s/\r\n|\r|\n/<BR>/g;
このようにコーディングしてみたらいけました。
0195nobodyさん04/04/13 10:30ID:???
>>194
試しにこう書いてみよう。
$msg = ~ s/\r\n|\r|\n/<BR>/g;

~ の意味を調べてみよう。
0196nobodyさん04/04/13 15:08ID:???
time()で返す秒数って、
何かちゃんとした名前があったような気がしたんだけど。
何だっけ。

カタカナ4文字でスがついたような気がする。
019719604/04/13 15:09ID:???
ごめん、ユリウス暦と混同している可能盛大。
名前がなかったかも。
0198nobodyさん04/04/13 15:42ID:sCIWFJ4B
HTMLに、DBに入れられたクレジットカード番号を
表示させる、ということをやっています。
番号が入っているcar_numフィールド(11番目)には
[****-****-****-****]
という形でデータが入っています。
しかし、番号確認画面でその末尾4ケタのみ表示させたいのですが、
なかなか良い考えが浮かびません。
今は以下のように書いて丸々16ケタ表示させています。
諸先輩方、アドバイスよろしくお願いいたします。

<tr>
END
if ($odr[10] == 2){
print"$odr[11]"
}
print <<END;
</td>
0199nobodyさん04/04/13 16:05ID:???
>>196
あるよ。エ・・・秒
なんだったかな思いだせん。。
020019904/04/13 16:05ID:???
わかった
エボック秒だわ
0201nobodyさん04/04/13 16:05ID:???
>>196
ヒント:シルバニアファミリーと言えばこの会社。かつてはカセットビジョンなど
家庭用ゲーム機も出していた。
020219904/04/13 16:06ID:???
ごめん。たぶんエボックじゃなくてエポック。
020319604/04/13 16:41ID:???
>>202
おー、それそれ。
お礼に自分の屁が臭い時に喜びを感じる性癖をプレゼントします。
0204nobodyさん04/04/13 16:46ID:???
>>203
それは俺の性癖だが何か?
0205nobodyさん04/04/13 18:00ID:???
dfで取得したディスク使用量のデータから一部の数字だけ
抜き出してPERLで使いたいのですが、どうすれば良いのでしょうか?
例えば

$string = "FilesystemSizeUsedAvailCapacityMounted on"

の一行から、Size, Usedだけを取り出して使いたいとすると、
@pairs = split(/(\t)/, $string);
print "@pairs[1] @pairs[2]";
としても上手く行きません。(\s)*でも無理なようです。
0206nobodyさん04/04/13 18:18ID:???
@pairs = split(/\t/, $string);
print "$pairs[1] $pairs[2]";
020720504/04/13 18:21ID:???
>>206
@pairs = split(/\t/, $string);
だと、何故か全て@pairs[0]に全文が入ってしまい、
@pairs[1]以降は空になってしまうようです。
0208nobodyさん04/04/13 18:36ID:???
>>207
$stringは本当にタブ区切りになってるのか?
020920504/04/13 18:40ID:???
何を区切りに使っているかは、良くわかりません。
shellのdfコマンド出力から一行抜いてきたstringです。
dfは何を使って区切っているのでしょう?

Filesystem 512-blocks Used Avail Capacity Mounted on
/dev/disk1s9 39870600 36823240 3047360 92% /Volumes/disk1
/dev/disk3s2 320144448 267850648 52293800 84% /Volumes/disk2
0210nobodyさん04/04/13 18:42ID:???
>>205-206
何も調べずに的外れなコードを書く奴もDQNだが、解答する奴もそれに劣らずイカレてるな。

>>205
> データから一部の数字だけ
とあるのにコードに数字が一切ないのは何故だ?

my(@data) = ($string =~ /([A-Z][a-z]+)/g);
print "$data[1], $data[2]\n";

お前の望むことはとりあえずこれで出来るが、本当にこんなことがしたいのか?

0211nobodyさん04/04/13 18:44ID:???
ざっと読んだだけだからよくわからんが
$stringを切って配列に代入しようとしてるなら
$stringをprintしてみれば何区切りかわかることだろ。
0212nobodyさん04/04/13 18:48ID:???
>>209
⊂⌒~⊃。Д。)⊃ ダァーーーッ
021321004/04/13 18:50ID:???
>>209
おいおい…(絶句)
もう何も言うまい。ほらよ。

my %data;
my @fileds = ('Filesystem', '512-blocks', 'Used', 'Avail', 'Capacity', 'Mounted on');
@data{@fields} = split / /, $string;

use Data::Dumper;
print Dumper(\%data);
0214nobodyさん04/04/13 19:00ID:???
>>213
…ハァ

split ' ', $string;
021520504/04/13 19:00ID:???
「現在、??? gbのうち??? gb使用されています」
みたいな感じの文章出力に使う用です。
■ このスレッドは過去ログ倉庫に格納されています