2つの変数が有ります。
2つの変数にはそれぞれ文字が入っています。
これをあらたな変数を作りその中に一緒に入れたいのですが思うように出来ません。
下記のような事をしただけでは1つに変数にまとめる事は出来ないのでしょうか
ご指導お願い致します。

@Copany_ken = $ROWKDATA[1], $ROWKDATA[2];

A 回答 (2件)

変数同士の演算に、「合体」というのはありません。


aeic さんの言う「合体」とは、どのような操作を指しているのでしょうか?

数値同士の加算であれば、
  $c = $a + $b;
ですし、文字列同士の結合であれば、
  $c = $a . $b;
もしくは
  $c = "$a$b";
です。

> @Copany_ken = $ROWKDATA[1], $ROWKDATA[2];
とありますが、配列の1要素として代入するのであれば、
  $Copany_ken[ 添え字 ] = 変数;
もしくは、
  push @Copany_ken, 変数;
とします。

できるだけ具体的に「やりたいこと」を書いた方が、的確な答えが得られますよ。
    • good
    • 0

@Copany_ken = ($ROWKDATA[1], $ROWKDATA[2]);



でうまく行きません?

後、@Company_kenって「一つの変数(scaler、スカラ)」ではなく、array(配列)ですよ。
この辺の違いが分からないのであれば、入門書なりを読んでおいた方が良いと思います。

この回答への補足

申し訳ないです。
配列に入れるのではなく変数同士を合体させてそれを新たな変数に入れたかったのです。

お願いします。

補足日時:2002/03/22 16:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q$abc[1] と @abc[1] の違いについて

$abc[1]は理解できるのですが、
@abc[1]がわかりません、
宜しくお願いします。

Aベストアンサー

> 「配列スライス」はどんな場合使うのですか
うーん、私はあまり配列スライスは使わないのでよい例が浮かびませんが、、^^;
例えば、検索を行うCGIなどでページ分割を行う時、@data に検索結果全件が入っているとして、
  my $lines = 50;           # 1ページに表示する件数
  my $page = $FORM{page} - 1;  # 表示するページ
  @data = @data[$page*$lines .. ($page+1)*$lines-1];
みたいな感じで、表示する部分を抽出するとかかな?

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Qperl cgi文字化け解消方法と[1~][11~][21~][最新10件]のようなリンクを付ける方法。

perlにてcgiを勉強しようと初掲示板を作ってみました。
しかし、日本語を入力すると文字化けしてしまいます。
また、入力フォームの下に[1~][11~][21~][最新10件]のようなリンクを付けたいです。
以上2点のやり方を教えて下さい。お願いします。

#!/usr/bin/perl -w

use strict;
use warnings;
use Encode;
use utf8;
use CGI;

print "location: ./bbs.html\n\n";
print "Content-type: text/html\n\n";

my $q = new CGI;
my $name = $q->param('name');
my $body = $q->param('body');

$name =~ s/</&lt;/g;
$name =~ s/>/&gt;/g;
$body =~ s/</&lt;/g;
$body =~ s/>/&gt;/g;
$body =~ s/\n/<br \/>/g;

my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$mon += 1;
$wday = sprintf("%s", qw(日 月 火 水 木 金 土)[$wday]);
my $time = sprintf "$year/%02d/%02d($wday) %02d:%02d:%02d",$mon,$mday,$hour,$min,$sec;

open LOG, ">> log.txt";
print LOG "$time<>$name<>$body\n";
open LOG, "< log.txt";
my @log = <LOG>;
close LOG;

open HTML, "> bbs.html";
print HTML << "END";
<html>
<head>
<style>
body{background:#f0f0f0;}
span.name{color:blue;}
p.body{margin-left:32px;}
</style>
<script type="text/javascript">
<!--
function check(form){
function id(id){return(document.getElementById(id));}
if(form.name.value == "" || form.body.value == ""){
id('err').innerHTML = "入力に誤りがあります<br />";
id('err').style.color = "red";
return false;
}else{
return true;
}
}
//-->
</script>
<title>簡易掲示板</title>
</head>
<body>
<form action="bbs.cgi" method="post" onsubmit="return check(this)">
<fieldset>
<legend>入力フォーム</legend>
<span id="err"></span>
<label>名前</label><br />
<input type="text" name="name" /><br />
<label>本文</label><br />
<textarea name="body"></textarea><br />
<input type="submit" value="書き込み" />
</fieldset>
</form>
<hr />
END
close HTML;

open HTML, ">> bbs.html";
my $num = 0;
for(@log){
$num++;
chomp($_);
my @write = split /<>/, "$_";
print HTML "<p>$num:<span class='name'>$write[1]</span> $write[0]</p>\n<p class='body'>$write[2]</p>\n";
}

print HTML << "END";
<hr />
<a href="dammy">TOP</a>
</body>
</html>
END
close HTML;

exit;

よろしくお願いします。

perlにてcgiを勉強しようと初掲示板を作ってみました。
しかし、日本語を入力すると文字化けしてしまいます。
また、入力フォームの下に[1~][11~][21~][最新10件]のようなリンクを付けたいです。
以上2点のやり方を教えて下さい。お願いします。

#!/usr/bin/perl -w

use strict;
use warnings;
use Encode;
use utf8;
use CGI;

print "location: ./bbs.html\n\n";
print "Content-type: text/html\n\n";

my $q = new CGI;
my $name = $q->param('name');
my $body = $q->param('body');...続きを読む

Aベストアンサー

<つづき>

my $num = 0;
my $p = int(@log/10);
if(@log%10){$p+=1}
my$index;
my$pg=1;
my$s=1;
my$l=10;
if(@log>10){
 $index=qq(<a href="bbs.html">[最新の10件]</a> );
 for(2..$p){
  $s+=10;$l=$_==$p?scalar(@log):$l+10;
  $index.=qq(<a href="bbs_$_.html">[$s‐$l]</a> );
 }
}
@log=reverse(@log);
for(@log){
 chomp;
 $num++;
 my @write = split /<>/;
 print HTML "<p>$num:<span class='name'>$write[1]</span> $write[0]</p><p class='body'>$write[2]</p>\n";
 unless($num%10&&$num!=scalar(@log)){
  print HTML << "END";
<hr>
$index
</body>
</html>
END
  close HTML;
  last if($pg==$p);
  $pg++;
  open HTML, "> bbs_$pg.html";
  print HTML << "END";
<html>
<head>
<style>
body{background:#f0f0f0;}
span.name{color:blue;}
p.body{margin-left:32px;}
</style>
<script type="text/javascript">
<!--
 function check(form){
 function id(id){return(document.getElementById(id));}
 if(form.name.value == "" || form.body.value == ""){
  id('err').innerHTML = "入力に誤りがあります<br>";
  id('err').style.color = "red";
  return false;
 }else{
  return true;
 }
}
//-->
</script>
<title>簡易掲示板</title>
</head>
<body>
<form action="bbs.cgi" method="post" onsubmit="return check(this)">
<fieldset>
<legend>入力フォーム</legend>
<span id="err"></span>
<label>名前</label><br>
<input type="text" name="name"><br>
<label>本文</label><br>
<textarea name="body"></textarea><br>
<input type="submit" value="書き込み">
</fieldset>
</form>
<hr>
END
 }
}
exit;

__END__

<つづき>

my $num = 0;
my $p = int(@log/10);
if(@log%10){$p+=1}
my$index;
my$pg=1;
my$s=1;
my$l=10;
if(@log>10){
 $index=qq(<a href="bbs.html">[最新の10件]</a> );
 for(2..$p){
  $s+=10;$l=$_==$p?scalar(@log):$l+10;
  $index.=qq(<a href="bbs_$_.html">[$s‐$l]</a> );
 }
}
@log=reverse(@log);
for(@log){
 chomp;
 $num++;
 my @write = split /<>/;
 print HTML "<p>$num:<span class='name'>$write[1]</span> $write[0]</p><p class='body'>$write[2]</p>\n";
 unless($num%10...続きを読む

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.


おすすめ情報