2011-11-24 37 views

Trả lời

22

Xem perldoc -f index:

$x = "hello.world"; 
$y = substr($x, 0, index($x, '.')); 
+3

Tôi không có nghĩa là tham chiếu perldoc dưới dạng "RTFM" nhưng dưới dạng "Để biết thêm thông tin, hãy xem: ____". :) –

5

Sử dụng substr:

my $string = "hello.world"; 
my $substring = substr($string, 0, index($string, ".")); 

Hoặc sử dụng regexp:

my ($substring2) = $string =~ /(.*)?\./; 
+1

's/chuỗi con/chất nền/g' –

+0

@JimDavis thanks – yko

+1

Chất nền sẽ cung cấp chuỗi cho đến khi dấu * đầu tiên' .', regex sẽ cung cấp chuỗi cho đến khi dấu * * cuối cùng. Lưu ý sự khác biệt. Sử dụng '. *?' Cho regex không tham lam để có cùng chức năng. – TLP

1
use strict; 
use warnings; 

my $string = "hello.world"; 
my $dot = index($string, '.'); 
my $word = substr($string, 0, $dot); 

print "$word\n"; 

mang đến cho bạn hello

+0

cho THẾ GIỚI; my $ world = substr ($ string, $ dot, length ($ string)); – Hariboo

1

Một khả năng khác:

my $string = 'hello.world'; 
print ((split /\./, $string)[0], "\n"); 
1

Với tinh thần TIMTOWTDI, và giới thiệu tính năng mới: Sử dụng non-destructive option/r

my $partial = $string =~ s/\..*//sr; 

Các tham lam .* cuối cùng sẽ chop off tất cả mọi thứ sau khi giai đoạn đầu tiên, bao gồm các ký tự dòng mới có thể (tùy chọn /s), nhưng giữ nguyên chuỗi ban đầu và loại bỏ sự cần thiết của các mệnh lệnh để áp đặt bối cảnh danh sách (tùy chọn /r).

Trích từ perlop:

Nếu tùy chọn/r (không phá hủy) được sử dụng sau đó nó chạy thay vào một bản sao của chuỗi và thay vì trả lại số sự thay đổi người, nó sẽ trả bản sao có xảy ra sự thay thế hay không. Chuỗi gốc không bao giờ thay đổi khi/r là được sử dụng. Bản sao sẽ luôn là một chuỗi đơn giản, ngay cả khi đầu vào là đối tượng hoặc biến cố định.

Các vấn đề liên quan