Функция Excel () в Excel, вероятно, игнорирует ассоциации файлов. Вы почти наверняка должны сказать что-то более похожее на:
Function Chk()
Dim RetVal
Chk = Shell("C:\Perl\bin\perl.exe C:\Perl\bin\Hello.pl", 1)
End Function
чтобы получить эффект, который вы хотели. Два изменения, на которые следует обратить внимание: во-первых, явный вызов perl.exe, а во-вторых, небольшая синтаксическая ошибка в вашей функции, как написано.
Обратите внимание, что если в пути к perl.exe или пути к вашему сценарию (или к любым дополнительным аргументам к вашему сценарию) есть пробелы, вам нужно будет сформировать строку, содержащую символы в двойных кавычках, заключенные в кавычки что-то вроде:
Function Chk()
Dim RetVal
Chk = Shell("C:\Perl\bin\perl.exe ""C:\Some path\with spaces\Hello.pl""", 1)
End Function
сделает свое дело.