*
перед символом означает нечто совершенно иное в объявлении и в теле функции.
int *x;
- объявляет указатель на объект int
y = *x;
- *
разыменовывает указатель x
, он противоположен его значению в объявлении. Он устраняет один уровень косвенности, когда в объявлении он добавляет один уровень.
Я думаю, что это причина вашего замешательства.
в вашем примере if (*str1 == *str2)
*
«убирает» косвенность, и результатом является сам символ (не указатель на указатель)
Вы узнали, что можно также сделать это:
$line=~ tr/\015//d;
^M является возвратом каретки. Можно сделать это:
$str =~ s/\r//g
Или 1 лайнер:
perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt
Немного не связанный, но удалить ^M из командной строки с помощью Perl, сделайте это:
perl -p -i -e "s/\r\n/\n/g" file.name
Для преобразования стиля DOS в UNIX разрабатывают окончания строки:
for ($line in <FILEHANDLE>) {
$line =~ s/\r\n$/\n/;
}
Или, для удаления UNIX и/или DOS разрабатывают окончания строки:
for ($line in <FILEHANDLE>) {
$line =~ s/\r?\n$//;
}
В хите vi :
.
Затем s/Control-VControl-M//g
.
Control-V
Control-M
очевидно, те ключи. Не обстоятельно объясняйте его.