機能 substr() Perl

は、Perlプログラミング言語を搭機能 substr(). この機能が文字列です。 この機能を利用できるを得る部分文字列、または交換の一部の文字列を別の文字列になります。

ここでは一例ですの受け部の文字列:

▶ Run
#!/usr/bin/perl

my $str = 'Hello, world!';

print "'" . substr($str, 7, 5) . "'";

このプログラムはテキストが表示され 'world'. コーダー接続■通話機能名 substr($str, 7, 5)と だから線 $str 五文字からの位置にします。 この利用 の価値 $str に変更はありません。

使用時 substr() つの引数の値を変化させた変数に格納されます。 ここでは一例を substr() 替え:

▶ Run
#!/usr/bin/perl

my $str = 'Hello, world!';

print "'" . substr($str, 7, 5, 'you') . "'\n";
print $str;

の出力はプログラム:

'world'
Hello, you!

の返り値を呼び出すときは substr($str, 7, 5, 'you') が同じ呼び出すときは substr($str, 7, 5), ものつの引数で変数の値に変更します。 の world に置換した you. ください なお、交換用した正しいにもかかわらず、本語の単語の数 します。

引数

my $str1 = substr($str, $offset);
my $str2 = substr($str, $offset, $length);
my $str3 = substr($str, $offset, $replacement);

機能 substr() は、次のことがらが指定されますと、三、四論争することができます。

にしようとした場合にその機能を利用す substr() 引数のない、または一 引数でエラー:

Not enough arguments for substr at script.pl line 3, near "substr()"
Execution of script.pl aborted due to compilation errors.

使用時のように二つの引数を substr($str, $offset) の機能を返します すべての文字から文字列 $str はじめの文字の位置 $offset の最後に行います。

使用時の三つの引数 substr($str, $offset, $length) の機能を返します $length 文字から文字列 $str はじめの文字の位置 $offset.

使用時 substr() とは引数の文字列値 に変更はありません。

ご利用の場合はつの引数 substr($str, $offset, $replacement)機能 を返しますと同一の場合には三つの引数、また 交換は、元の文字列の値を取得 $replacement.

戻り値

機能 substr() 月は undef、または文字列です。

undef 返しようとした場合にget要素から文字列 タル-リターン-インデックス以上の長さの文字列になります。 ここではサンプルプログラムを返します undef:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $str = 'Hello, world!';
my $str1 = substr($str, 10000);

warn Dumper $str1;

のイベントの場合プログラムコードする use warnings;、プログラムも さらに、警告画面:

substr outside of string at script.pl line 8.

負の値 $offset

機能 substr() を指定することができ負の値を引数です。 例プログラム:

▶ Run
#!/usr/bin/perl

my $str = 'Hello, world!';
print substr($str, -3);

画面に表示するテキスト ld! は最後の三つの文字から文字列 Hello, world!.

負の第二引数の位置に数えられる。

substr($str, -3)を 再現できていることが分かり substr($str, -3, 3).

負の値 $length

の価値を第三引数にできます。 ここでの例:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $str = 'Hello, world!';

say substr($str, 7, -1); # world
say substr($str, 7, -2); # worl
say substr($str, 7, -3); # wor

公式文書

ここでは、出力のコマンド perldoc -f substr:

    substr EXPR,OFFSET,LENGTH,REPLACEMENT
    substr EXPR,OFFSET,LENGTH
    substr EXPR,OFFSET
            Extracts a substring out of EXPR and returns it. First character
            is at offset zero. If OFFSET is negative, starts that far back
            from the end of the string. If LENGTH is omitted, returns
            everything through the end of the string. If LENGTH is negative,
            leaves that many characters off the end of the string.

                my $s = "The black cat climbed the green tree";
                my $color  = substr $s, 4, 5;      # black
                my $middle = substr $s, 4, -11;    # black cat climbed the
                my $end    = substr $s, 14;        # climbed the green tree
                my $tail   = substr $s, -4;        # tree
                my $z      = substr $s, -4, 2;     # tr

            You can use the "substr" function as an lvalue, in which case
            EXPR must itself be an lvalue. If you assign something shorter
            than LENGTH, the string will shrink, and if you assign something
            longer than LENGTH, the string will grow to accommodate it. To
            keep the string the same length, you may need to pad or chop
            your value using "sprintf".

            If OFFSET and LENGTH specify a substring that is partly outside
            the string, only the part within the string is returned. If the
            substring is beyond either end of the string, "substr" returns
            the undefined value and produces a warning. When used as an
            lvalue, specifying a substring that is entirely outside the
            string raises an exception. Here's an example showing the
            behavior for boundary cases:

                my $name = 'fred';
                substr($name, 4) = 'dy';         # $name is now 'freddy'
                my $null = substr $name, 6, 2;   # returns "" (no warning)
                my $oops = substr $name, 7;      # returns undef, with warning
                substr($name, 7) = 'gap';        # raises an exception

            An alternative to using "substr" as an lvalue is to specify the
            replacement string as the 4th argument. This allows you to
            replace parts of the EXPR and return what was there before in
            one operation, just as you can with "splice".

                my $s = "The black cat climbed the green tree";
                my $z = substr $s, 14, 7, "jumped from";    # climbed
                # $s is now "The black cat jumped from the green tree"

            Note that the lvalue returned by the three-argument version of
            "substr" acts as a 'magic bullet'; each time it is assigned to,
            it remembers which part of the original string is being
            modified; for example:

                my $x = '1234';
                for (substr($x,1,2)) {
                    $_ = 'a';   print $x,"\n";    # prints 1a4
                    $_ = 'xyz'; print $x,"\n";    # prints 1xyz4
                    $x = '56789';
                    $_ = 'pq';  print $x,"\n";    # prints 5pq9
                }

            With negative offsets, it remembers its position from the end of
            the string when the target string is modified:

                my $x = '1234';
                for (substr($x, -3, 2)) {
                    $_ = 'a';   print $x,"\n";    # prints 1a4, as above
                    $x = 'abcdefg';
                    print $_,"\n";                # prints f
                }

            Prior to Perl version 5.10, the result of using an lvalue
            multiple times was unspecified. Prior to 5.16, the result with
            negative offsets was unspecified.

関連する話題

その他の記事