Я перебираю лист Excel в одном столбце B. Если ячейка содержит "
, то замените ее на Inches
. Однако при использовании функции substr $newval
остается пустым. В тестовом прогоне оба значения $cell
и $ind
содержат правильные значения. У меня нет ошибок и предупреждений.
Почему $newval
пусто? Я нашел этот пример substr онлайн и не могу понять, что я делаю по-другому:
Альтернативой использованию substr в качестве lvalue является указание строки замены в качестве 4-го аргумента. Это позволяет вам заменить части EXPR и вернуть то, что было раньше в одной операции, точно так же, как вы можете с помощью соединения.
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"
Вот мой код:
...
if($sheet->Range("B". $i)->{Value} =~ m/\"/)
{
my $cell = $sheet->Range("B". $i)->{Value};
print $cell . "\n"; # Notebook 24"
my $ind = index($cell, '\"');
print $ind ."\n"; # -1
my $newval = substr($cell, $ind, 0, " Inches");
print $newval . "\n"; # (blank)
<STDIN>;
$sheet->Range("B". $i)->{Value} = $newval;
}
...
РЕДАКТИРОВАТЬ: (ДОБАВИТЬ ПРИМЕР ВЫХОДА В КОНСОЛЕ)
РЕДАКТИРОВАТЬ 2: (УКАЗАТЬ СЕЙЧАС ПОЗИТИВНО И ПРАВИЛЬНО)
...
if($sheet->Range("B". $i)->{Value} =~ m/\"/)
{
my $cell = $sheet->Range("B". $i)->{Value};
print $cell . "\n"; # Notebook 24"
my $ind = index($cell, '"');
print $ind ."\n"; # 11
my $newval = substr($cell, $ind, 0, " Inches");
print $newval . "\n"; # (blank)
<STDIN>;
$sheet->Range("B". $i)->{Value} = $newval;
}
...
ВЫХОД КОНСОЛИ: