を持っていた場合:Perlの文字列にテキストを挿入するにはどうしたらいいですか?私は
$foo= "12."bar bar bar"|three";
は、どのように私は、テキスト「..」変数内のテキスト12の後に挿入するのでしょうか?
を持っていた場合:Perlの文字列にテキストを挿入するにはどうしたらいいですか?私は
$foo= "12."bar bar bar"|three";
は、どのように私は、テキスト「..」変数内のテキスト12の後に挿入するのでしょうか?
Perlでは、独自の引用符区切り文字を選択できます。補間文字列(つまり、""
)の中に二重引用符を使用する必要がある場合は、補完しない文字列(つまり''
)の中に一重引用符を使用する必要がある場合は、quote operatorを使用して、その文字の区切り文字文字列。区切り文字には、括弧で囲まれたものと括弧で囲まれていないものの2つの形式があります。角括弧区切り文字は、開始文字と終了文字が異なる([]
,{}
,()
,[]
、<>
)。他のすべての文字*
は、括弧で囲まれていないデリミタとして使用できます。だからあなたの例では、後にテキストを挿入する
$foo = qq(12."bar bar bar"|three);
のように書くことができ
「12」多くの方法で行うことができます( TIMTOWDI)。一般的な解決策は、置換するテキストに一致させるために substitutionを使用することです。$foo =~ s/^(12[.])/$1../;
^が刺されの開始時に一致を意味し、()
手段は、変数$1
にこのテキストをキャプチャし、12
は単なる文字列"12"
と一致し、[]
は、カッコ内の文字のいずれかに一致する意味します。 .
は正規表現では一般的に特別な意味を持ちますが、文字クラス([]
)では特別な意味を持つため、角括弧が使用されています。文字クラスの別のオプションは、.
の特別な意味を\
でエスケープすることですが、多くの人がそれが文字クラスよりも醜いことが分かります。
$foo =~ s/^(12\.)/$1../;
文字列にテキストを挿入する別の方法はsubstr
への呼び出しに値を割り当てることです。これは、Perlの非常にユニークな機能の1つを強調しています。多くの関数がlvaluesとして機能します。つまり、変数のように扱うことができます。
substr($foo, 3, 0) = "..";
"12."
を見つけるために、それが始まる場所を見つけるためにindex
を使用することができ、文字列、length
に存在する場合、あなたが既に知っているしなかった場合はどのくらい「12」その情報をsubstr
で使用してください。
ここには、上記のコードを含む完全に機能するPerlスクリプトがあります。
#!/usr/bin/perl
use strict;
use warnings;
my $foo = my $bar = qq(12."bar bar bar"|three);
$foo =~ s/(12[.])/$1../;
my $i = index($bar, "12.") + length "12.";
substr($bar, $i, 0) = "..";
print "foo is $foo\nbar is $bar\n";
*
あなたがPerl初心者のメールリストにあるこのような詳細な回答を書いていれば、あなたはどんな仕事をしてもうまくいかないでしょう。幸いにも、SOにはPerlの質問が大量にありません。 – Telemachus
PBワックスや曇りが出ることがあります。とにかくやりたいことがないときにPBに行く傾向があります。または、私はとても不満です。とにかく実際の作業を行うことはできません。このすべては私自身のトレーナーの訓練の一部です(これがハイパー・リサーチの答えに行く理由です)。 –
それは答えの地獄です。 – SquareCog
あなたはPerlで文字列に二重引用符を使用する場合は、二つの主要なオプションがあります。
$foo = "12.\"bar bar bar\"|three";
か:
$foo = '12."bar bar bar"|three';
を最初のオプションは、バックスラッシュで文字列内の引用符をエスケープします。
2番目のオプションは、一重引用符を使用します。つまり、二重引用符は文字列の一部として扱われます。しかし、一重引用符ではすべてがリテラルなので、$var
または@array
は変数として扱われません。
$myvar = 123;
$mystring = '"$myvar"';
print $mystring;
> "$myvar"
:しかしたとえば
$myvar = 123;
$mystring = "\"$myvar\"";
print $mystring;
> "123"
他の多数もありQuote-like Operatorsあなたの代わりに使用することができます。
$foo = "12.\"bar bar bar\"|three";
$foo =~s/12\./12\.\.\./;
print $foo; # results in 12...\"bar bar bar\"|three"
質問である空白文字(スペース、タブ、キャリッジリターン、ラインフィード、垂直タブ、およびフォームフィード)を除くすべての文字が本当に明確ではありません。あなたが何をしようとしているのか分かりません。 –
今あなたの変数$ fooには正確に何があると思いますか?警告を有効にして実行しようとしましたか? – Telemachus